memento-mcp-server 1.12.0 → 1.13.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.
- package/dist/algorithms/forgetting-algorithm.d.ts +21 -13
- package/dist/algorithms/forgetting-algorithm.d.ts.map +1 -1
- package/dist/algorithms/forgetting-algorithm.js +32 -24
- package/dist/algorithms/forgetting-algorithm.js.map +1 -1
- package/dist/algorithms/hybrid-search-engine.d.ts +11 -9
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +77 -75
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-engine.d.ts +33 -11
- package/dist/algorithms/search-engine.d.ts.map +1 -1
- package/dist/algorithms/search-engine.js +157 -62
- package/dist/algorithms/search-engine.js.map +1 -1
- package/dist/algorithms/search-ranking.d.ts +57 -50
- package/dist/algorithms/search-ranking.d.ts.map +1 -1
- package/dist/algorithms/search-ranking.js +91 -84
- package/dist/algorithms/search-ranking.js.map +1 -1
- package/dist/algorithms/spaced-repetition.d.ts +18 -13
- package/dist/algorithms/spaced-repetition.d.ts.map +1 -1
- package/dist/algorithms/spaced-repetition.js +28 -23
- package/dist/algorithms/spaced-repetition.js.map +1 -1
- package/dist/algorithms/vector-search-engine-migration.d.ts +8 -6
- package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine-migration.js +13 -11
- package/dist/algorithms/vector-search-engine-migration.js.map +1 -1
- package/dist/algorithms/vector-search-engine-refactored.d.ts +7 -7
- package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine-refactored.js +7 -7
- package/dist/algorithms/vector-search-engine-refactored.js.map +1 -1
- package/dist/algorithms/vector-search-engine.d.ts +25 -20
- package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine.js +47 -43
- package/dist/algorithms/vector-search-engine.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -1
- package/dist/config/index.js.map +1 -1
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +24 -4
- package/dist/database/init.js.map +1 -1
- package/dist/database/migration/migrations/006-fts5-reflection-notes-migration-status.sql +30 -0
- package/dist/database/migration/migrations/006-fts5-reflection-notes.d.ts +113 -0
- package/dist/database/migration/migrations/006-fts5-reflection-notes.d.ts.map +1 -0
- package/dist/database/migration/migrations/006-fts5-reflection-notes.js +441 -0
- package/dist/database/migration/migrations/006-fts5-reflection-notes.js.map +1 -0
- package/dist/database/migration/migrations/006-fts5-reflection-notes.sql +26 -0
- package/dist/database/schema.sql +11 -9
- package/dist/server/bootstrap.d.ts +4 -0
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +11 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +3 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +2 -1
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.js +3 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/async-optimizer.d.ts +2 -1
- package/dist/services/async-optimizer.d.ts.map +1 -1
- package/dist/services/async-optimizer.js +28 -1
- package/dist/services/async-optimizer.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +5 -1
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +13 -1
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/cache-service.js +1 -1
- package/dist/services/cache-service.js.map +1 -1
- package/dist/services/failure-detector.d.ts +120 -0
- package/dist/services/failure-detector.d.ts.map +1 -0
- package/dist/services/failure-detector.js +370 -0
- package/dist/services/failure-detector.js.map +1 -0
- package/dist/services/llm-based-relation-extractor.js +1 -1
- package/dist/services/llm-based-relation-extractor.js.map +1 -1
- package/dist/services/reflexion-worker.d.ts +170 -0
- package/dist/services/reflexion-worker.d.ts.map +1 -0
- package/dist/services/reflexion-worker.js +636 -0
- package/dist/services/reflexion-worker.js.map +1 -0
- package/dist/services/relation-graph.d.ts +2 -2
- package/dist/services/relation-graph.js +3 -3
- package/dist/services/relation-graph.js.map +1 -1
- package/dist/tools/base-tool.d.ts +5 -0
- package/dist/tools/base-tool.d.ts.map +1 -1
- package/dist/tools/base-tool.js +39 -0
- package/dist/tools/base-tool.js.map +1 -1
- package/dist/tools/recall-tool.d.ts.map +1 -1
- package/dist/tools/recall-tool.js +36 -2
- package/dist/tools/recall-tool.js.map +1 -1
- package/dist/tools/remember-tool.d.ts +24 -0
- package/dist/tools/remember-tool.d.ts.map +1 -1
- package/dist/tools/remember-tool.js +445 -273
- package/dist/tools/remember-tool.js.map +1 -1
- package/dist/tools/types.d.ts +5 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +34 -10
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/fts5-migration-status.d.ts +72 -0
- package/dist/utils/fts5-migration-status.d.ts.map +1 -0
- package/dist/utils/fts5-migration-status.js +304 -0
- package/dist/utils/fts5-migration-status.js.map +1 -0
- package/dist/utils/reflection-notes-merge.d.ts +58 -0
- package/dist/utils/reflection-notes-merge.d.ts.map +1 -0
- package/dist/utils/reflection-notes-merge.js +227 -0
- package/dist/utils/reflection-notes-merge.js.map +1 -0
- package/dist/utils/reflection-notes-normalize.d.ts +43 -0
- package/dist/utils/reflection-notes-normalize.d.ts.map +1 -0
- package/dist/utils/reflection-notes-normalize.js +164 -0
- package/dist/utils/reflection-notes-normalize.js.map +1 -0
- package/dist/utils/reflection-notes-schema.d.ts +84 -0
- package/dist/utils/reflection-notes-schema.d.ts.map +1 -0
- package/dist/utils/reflection-notes-schema.js +215 -0
- package/dist/utils/reflection-notes-schema.js.map +1 -0
- package/package.json +3 -1
- package/src/database/schema.sql +11 -9
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Memento-Goals.md
|
|
2
|
+
* 학습 효율을 극대화하기 위해 최적의 리뷰 시점을 계산합니다.
|
|
3
|
+
* Memento-Goals.md에 정의된 검증된 간격 반복 공식을 구현하여 과학적 근거에 기반한 학습 스케줄을 제공합니다.
|
|
4
4
|
*/
|
|
5
5
|
export class SpacedRepetitionAlgorithm {
|
|
6
6
|
weights;
|
|
7
|
-
recallThreshold = 0.7; // 리콜
|
|
7
|
+
recallThreshold = 0.7; // 리콜 확률이 이 값 이하일 때 리뷰를 권장하여 망각 직전에 복습합니다.
|
|
8
8
|
constructor(weights) {
|
|
9
9
|
this.weights = {
|
|
10
10
|
importance: 0.6, // A1: 중요도 가중치
|
|
@@ -15,8 +15,8 @@ export class SpacedRepetitionAlgorithm {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* 다음 리뷰
|
|
19
|
-
*
|
|
18
|
+
* 학습자의 성과와 피드백을 반영하여 다음 리뷰 간격을 동적으로 조정합니다.
|
|
19
|
+
* 중요도, 사용성, 긍정적 피드백은 간격을 늘리고, 부정적 피드백은 간격을 줄여 학습 효율을 최적화합니다.
|
|
20
20
|
*/
|
|
21
21
|
calculateNextInterval(currentInterval, features) {
|
|
22
22
|
const { importance, usage, helpful_feedback, bad_feedback } = features;
|
|
@@ -28,22 +28,24 @@ export class SpacedRepetitionAlgorithm {
|
|
|
28
28
|
return Math.ceil(currentInterval * multiplier);
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
31
|
+
* 지수 감쇠 모델을 사용하여 시간 경과에 따른 기억 유지 확률을 계산합니다.
|
|
32
|
+
* 마지막 리뷰로부터 경과된 시간과 현재 간격을 비교하여 리콜 가능성을 정량화합니다.
|
|
33
33
|
*/
|
|
34
34
|
calculateRecallProbability(timeSinceLastReview, // 일 단위
|
|
35
35
|
interval) {
|
|
36
36
|
return Math.exp(-timeSinceLastReview / interval);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* 계산된 리콜 확률이 임계값 이하인지 확인하여 리뷰가 필요한지 판단합니다.
|
|
40
|
+
* 망각 직전에 복습할 수 있도록 적절한 시점에 리뷰를 권장합니다.
|
|
40
41
|
*/
|
|
41
42
|
needsReview(timeSinceLastReview, interval, threshold = this.recallThreshold) {
|
|
42
43
|
const recallProb = this.calculateRecallProbability(timeSinceLastReview, interval);
|
|
43
44
|
return recallProb <= threshold;
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
46
|
-
* 리뷰
|
|
47
|
+
* 메모리의 특성과 학습 성과를 반영하여 최적의 리뷰 스케줄을 생성합니다.
|
|
48
|
+
* 다음 리뷰 날짜, 간격, 리콜 확률 등을 종합하여 학습 계획을 수립합니다.
|
|
47
49
|
*/
|
|
48
50
|
createReviewSchedule(memoryId, currentInterval, lastReviewDate, features) {
|
|
49
51
|
const nextInterval = this.calculateNextInterval(currentInterval, features);
|
|
@@ -61,7 +63,7 @@ export class SpacedRepetitionAlgorithm {
|
|
|
61
63
|
};
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
66
|
+
* 여러 메모리에 대해 일괄적으로 리뷰 스케줄을 생성하여 효율적인 학습 계획을 수립합니다.
|
|
65
67
|
*/
|
|
66
68
|
createBatchReviewSchedules(memories) {
|
|
67
69
|
return memories.map(memory => {
|
|
@@ -75,16 +77,18 @@ export class SpacedRepetitionAlgorithm {
|
|
|
75
77
|
});
|
|
76
78
|
}
|
|
77
79
|
/**
|
|
78
|
-
* 리뷰
|
|
80
|
+
* 리콜 확률과 간격을 종합하여 리뷰 우선순위를 계산합니다.
|
|
81
|
+
* 긴급한 리뷰를 우선 처리하여 학습 효율을 최적화합니다.
|
|
79
82
|
*/
|
|
80
83
|
calculateReviewPriority(schedule) {
|
|
81
|
-
// 리콜 확률이 낮을수록, 간격이 길수록
|
|
84
|
+
// 리콜 확률이 낮을수록, 간격이 길수록 우선순위를 높게 설정하여 긴급한 리뷰를 우선 처리합니다.
|
|
82
85
|
const urgencyScore = 1 - schedule.recall_probability;
|
|
83
|
-
const intervalScore = Math.log(schedule.current_interval + 1) / 10; //
|
|
86
|
+
const intervalScore = Math.log(schedule.current_interval + 1) / 10; // 로그 스케일로 정규화하여 긴 간격의 영향력을 완화합니다.
|
|
84
87
|
return urgencyScore + intervalScore;
|
|
85
88
|
}
|
|
86
89
|
/**
|
|
87
|
-
*
|
|
90
|
+
* 실제 리콜 성과를 분석하여 알고리즘의 효과를 평가합니다.
|
|
91
|
+
* 간격별 성과를 분석하여 최적의 간격을 찾기 위해
|
|
88
92
|
*/
|
|
89
93
|
analyzeReviewPerformance(schedules, actualRecall // memory_id -> recall_success
|
|
90
94
|
) {
|
|
@@ -98,7 +102,7 @@ export class SpacedRepetitionAlgorithm {
|
|
|
98
102
|
const recalled = actualRecall.get(schedule.memory_id);
|
|
99
103
|
totalRecallRate += recalled ? 1 : 0;
|
|
100
104
|
recallCount++;
|
|
101
|
-
const interval = Math.floor(schedule.current_interval / 7) * 7; // 주 단위로
|
|
105
|
+
const interval = Math.floor(schedule.current_interval / 7) * 7; // 주 단위로 그룹화하여 유사한 간격의 성과를 비교합니다.
|
|
102
106
|
const current = performanceByInterval.get(interval) || { total: 0, successful: 0 };
|
|
103
107
|
current.total++;
|
|
104
108
|
if (recalled)
|
|
@@ -107,7 +111,7 @@ export class SpacedRepetitionAlgorithm {
|
|
|
107
111
|
}
|
|
108
112
|
}
|
|
109
113
|
const averageRecallRate = recallCount > 0 ? totalRecallRate / recallCount : 0;
|
|
110
|
-
// 간격별
|
|
114
|
+
// 간격별 성과를 계산하여 최적의 간격을 찾기 위해
|
|
111
115
|
const performanceByIntervalRate = new Map();
|
|
112
116
|
for (const [interval, stats] of performanceByInterval) {
|
|
113
117
|
performanceByIntervalRate.set(interval, stats.successful / stats.total);
|
|
@@ -120,29 +124,30 @@ export class SpacedRepetitionAlgorithm {
|
|
|
120
124
|
};
|
|
121
125
|
}
|
|
122
126
|
/**
|
|
123
|
-
*
|
|
127
|
+
* 학습자의 실제 리콜 성과를 반영하여 최적의 간격을 추천합니다.
|
|
128
|
+
* 성과가 좋으면 간격을 늘리고, 성과가 나쁘면 간격을 줄여 학습 효율을 최적화합니다.
|
|
124
129
|
*/
|
|
125
130
|
recommendOptimalInterval(currentInterval, recallHistory, // 최근 리콜 성공/실패 기록
|
|
126
131
|
features) {
|
|
127
132
|
if (recallHistory.length === 0) {
|
|
128
133
|
return currentInterval;
|
|
129
134
|
}
|
|
130
|
-
// 최근
|
|
131
|
-
const recentPerformance = recallHistory.slice(-5); // 최근 5
|
|
135
|
+
// 최근 성과를 기반으로 간격을 조정하여 학습자의 현재 상태를 반영합니다.
|
|
136
|
+
const recentPerformance = recallHistory.slice(-5); // 최근 5회의 성과만 사용하여 최신 추세를 반영합니다.
|
|
132
137
|
const successRate = recentPerformance.filter(success => success).length / recentPerformance.length;
|
|
133
|
-
// 성과에
|
|
138
|
+
// 성과에 따라 간격을 동적으로 조정하여 학습 효율을 최적화합니다.
|
|
134
139
|
let adjustmentFactor = 1.0;
|
|
135
140
|
if (successRate > 0.8) {
|
|
136
|
-
adjustmentFactor = 1.2; //
|
|
141
|
+
adjustmentFactor = 1.2; // 성과가 좋으면 간격을 늘려 학습 효율을 향상시키기 위해
|
|
137
142
|
}
|
|
138
143
|
else if (successRate < 0.6) {
|
|
139
|
-
adjustmentFactor = 0.8; //
|
|
144
|
+
adjustmentFactor = 0.8; // 성과가 나쁘면 간격을 줄여 더 자주 복습하도록 합니다.
|
|
140
145
|
}
|
|
141
146
|
const baseInterval = this.calculateNextInterval(currentInterval, features);
|
|
142
147
|
return Math.ceil(baseInterval * adjustmentFactor);
|
|
143
148
|
}
|
|
144
149
|
/**
|
|
145
|
-
*
|
|
150
|
+
* 특정 날짜로부터 경과된 일수를 계산하여 시간 기반 계산에 사용합니다.
|
|
146
151
|
*/
|
|
147
152
|
getDaysSince(date) {
|
|
148
153
|
const now = new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spaced-repetition.js","sourceRoot":"","sources":["../../src/algorithms/spaced-repetition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,MAAM,OAAO,yBAAyB;IACnB,OAAO,CAA0B;IACjC,eAAe,GAAW,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"spaced-repetition.js","sourceRoot":"","sources":["../../src/algorithms/spaced-repetition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* 기존 코드에서 리팩토링된 코드로의 점진적 전환을 지원합니다.
|
|
3
|
+
* 마이그레이션 가이드와 헬퍼를 제공하여 안전한 전환을 보장합니다.
|
|
4
4
|
*/
|
|
5
5
|
import { VectorSearchEngineRefactored } from './vector-search-engine-refactored';
|
|
6
6
|
import type { VectorSearchEngine } from './vector-search-engine';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* 기존 VectorSearchEngine에서 새로운 VectorSearchEngineRefactored로 안전하게 전환합니다.
|
|
9
|
+
* 마이그레이션 헬퍼를 제공하여 데이터 손실 없이 점진적 전환을 지원합니다.
|
|
10
10
|
*/
|
|
11
11
|
export declare class VectorSearchEngineMigration {
|
|
12
12
|
/**
|
|
13
|
-
* 기존 엔진을 새로운 엔진으로
|
|
13
|
+
* 기존 엔진을 새로운 엔진으로 교체하여 개선된 구현을 사용합니다.
|
|
14
|
+
* 데이터베이스 연결 상태를 유지하여 중단 없는 전환을 보장합니다.
|
|
14
15
|
*/
|
|
15
16
|
static migrate(oldEngine: VectorSearchEngine): VectorSearchEngineRefactored;
|
|
16
17
|
/**
|
|
17
|
-
* 점진적 마이그레이션을
|
|
18
|
+
* 점진적 마이그레이션을 위해 어댑터 패턴을 사용하여 기존 코드 수정 없이 전환합니다.
|
|
19
|
+
* 기존 인터페이스를 유지하면서 내부적으로는 새로운 구현을 사용합니다.
|
|
18
20
|
*/
|
|
19
21
|
static createAdapter(oldEngine: VectorSearchEngine): VectorSearchEngineRefactored;
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search-engine-migration.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-migration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;GAGG;AACH,qBAAa,2BAA2B;IACtC
|
|
1
|
+
{"version":3,"file":"vector-search-engine-migration.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-migration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;GAGG;AACH,qBAAa,2BAA2B;IACtC;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,GAAG,4BAA4B;IAa3E;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,kBAAkB,GAAG,4BAA4B;CA2ClF;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAc/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CA2D3B,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;WACU,qBAAqB,CAChC,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,4BAA4B,GACtC,OAAO,CAAC,OAAO,CAAC;IAgCnB;;OAEG;WACU,kBAAkB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,4BAA4B,EACvC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC;QACT,cAAc,EAAE,GAAG,CAAC;QACpB,cAAc,EAAE,GAAG,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CAoBH"}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* 기존 코드에서 리팩토링된 코드로의 점진적 전환을 지원합니다.
|
|
3
|
+
* 마이그레이션 가이드와 헬퍼를 제공하여 안전한 전환을 보장합니다.
|
|
4
4
|
*/
|
|
5
5
|
import { VectorSearchEngineRefactored } from './vector-search-engine-refactored';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* 기존 VectorSearchEngine에서 새로운 VectorSearchEngineRefactored로 안전하게 전환합니다.
|
|
8
|
+
* 마이그레이션 헬퍼를 제공하여 데이터 손실 없이 점진적 전환을 지원합니다.
|
|
9
9
|
*/
|
|
10
10
|
export class VectorSearchEngineMigration {
|
|
11
11
|
/**
|
|
12
|
-
* 기존 엔진을 새로운 엔진으로
|
|
12
|
+
* 기존 엔진을 새로운 엔진으로 교체하여 개선된 구현을 사용합니다.
|
|
13
|
+
* 데이터베이스 연결 상태를 유지하여 중단 없는 전환을 보장합니다.
|
|
13
14
|
*/
|
|
14
15
|
static migrate(oldEngine) {
|
|
15
16
|
const newEngine = new VectorSearchEngineRefactored();
|
|
16
|
-
// 기존 데이터베이스
|
|
17
|
+
// 기존 데이터베이스 연결을 새 엔진에 전달하여 중단 없는 전환을 보장합니다.
|
|
17
18
|
if (oldEngine.isConnected()) {
|
|
18
|
-
// 기존 엔진의 데이터베이스 인스턴스를 가져와서 새 엔진에
|
|
19
|
-
//
|
|
19
|
+
// 기존 엔진의 데이터베이스 인스턴스를 가져와서 새 엔진에 설정하여 연결 상태를 유지합니다.
|
|
20
|
+
// 실제 구현에서는 기존 엔진에서 데이터베이스 인스턴스를 추출하는 방법이 필요함
|
|
20
21
|
console.log('⚠️ 기존 데이터베이스 연결을 새 엔진으로 전달해야 합니다');
|
|
21
22
|
}
|
|
22
23
|
return newEngine;
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
* 점진적 마이그레이션을
|
|
26
|
+
* 점진적 마이그레이션을 위해 어댑터 패턴을 사용하여 기존 코드 수정 없이 전환합니다.
|
|
27
|
+
* 기존 인터페이스를 유지하면서 내부적으로는 새로운 구현을 사용합니다.
|
|
26
28
|
*/
|
|
27
29
|
static createAdapter(oldEngine) {
|
|
28
30
|
const newEngine = new VectorSearchEngineRefactored();
|
|
29
|
-
// 기존 엔진의 메서드들을 새 엔진으로
|
|
31
|
+
// 기존 엔진의 메서드들을 새 엔진으로 위임하여 호환성을 유지합니다.
|
|
30
32
|
const adapter = {
|
|
31
33
|
...newEngine,
|
|
32
|
-
// 기존 메서드들을 새 엔진으로
|
|
34
|
+
// 기존 메서드들을 새 엔진으로 위임하여 점진적 전환을 지원합니다.
|
|
33
35
|
async search(queryVector, options = {}, provider = 'tfidf') {
|
|
34
36
|
return await newEngine.search(queryVector, options, provider);
|
|
35
37
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search-engine-migration.js","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-migration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAGjF;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IACtC
|
|
1
|
+
{"version":3,"file":"vector-search-engine-migration.js","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* 기존 VectorSearchEngine의 대체품
|
|
2
|
+
* 유지보수성과 테스트 가능성을 향상시키기 위해 클린코드 원칙을 적용합니다.
|
|
3
|
+
* 기존 VectorSearchEngine의 대체품으로 점진적 마이그레이션을 지원합니다.
|
|
5
4
|
*/
|
|
6
5
|
import Database from 'better-sqlite3';
|
|
7
6
|
import type { VectorSearchResult, VectorIndexStatus, PerformanceTestResult } from '../types/vector-search.types';
|
|
8
7
|
/**
|
|
9
|
-
* 리팩토링된 벡터 검색
|
|
10
|
-
* 기존 VectorSearchEngine과 동일한
|
|
8
|
+
* 리팩토링된 벡터 검색 엔진으로 기존 코드와의 호환성을 유지하면서 개선된 구조를 제공합니다.
|
|
9
|
+
* 기존 VectorSearchEngine과 동일한 인터페이스를 제공하여 기존 코드 수정 없이 사용 가능하도록 합니다.
|
|
11
10
|
*/
|
|
12
11
|
export declare class VectorSearchEngineRefactored {
|
|
13
12
|
private container;
|
|
14
13
|
constructor();
|
|
15
14
|
/**
|
|
16
|
-
* 데이터베이스
|
|
15
|
+
* 벡터 검색 기능이 없으면 검색이 실패할 수 있으므로, 데이터베이스 연결을 설정하고 벡터 검색 기능의 사용 가능 여부를 확인합니다.
|
|
17
16
|
*/
|
|
18
17
|
initialize(db: Database.Database): void;
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
19
|
+
* 쿼리 벡터와 유사한 메모리를 검색하여 의미적으로 관련된 결과를 제공합니다.
|
|
20
|
+
* 리팩토링된 서비스를 통해 개선된 검색 기능을 제공합니다.
|
|
21
21
|
*/
|
|
22
22
|
search(queryVector: number[], options?: any, provider?: string): Promise<VectorSearchResult[]>;
|
|
23
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search-engine-refactored.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-refactored.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vector-search-engine-refactored.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-refactored.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAEtC;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,SAAS,CAAwB;;IAMzC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIvC;;;OAGG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,GAAQ,EACjB,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAWhC;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,GAAQ,EACjB,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAYhC;;OAEG;IACH,cAAc,IAAI,iBAAiB;IAKnC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAKtC;;OAEG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC;IAKjC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,OAAO;IAKtB;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB;AAGD,wBAAgB,qBAAqB,IAAI,4BAA4B,CAEpE;AAED,wBAAgB,wBAAwB,IAAI,4BAA4B,CAEvE;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAGD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* 기존 VectorSearchEngine의 대체품
|
|
2
|
+
* 유지보수성과 테스트 가능성을 향상시키기 위해 클린코드 원칙을 적용합니다.
|
|
3
|
+
* 기존 VectorSearchEngine의 대체품으로 점진적 마이그레이션을 지원합니다.
|
|
5
4
|
*/
|
|
6
5
|
import Database from 'better-sqlite3';
|
|
7
6
|
import { VectorSearchContainer } from '../services/vector-search/vector-search-container';
|
|
8
7
|
import { VectorSearchFactory } from '../factories/vector-search.factory';
|
|
9
8
|
/**
|
|
10
|
-
* 리팩토링된 벡터 검색
|
|
11
|
-
* 기존 VectorSearchEngine과 동일한
|
|
9
|
+
* 리팩토링된 벡터 검색 엔진으로 기존 코드와의 호환성을 유지하면서 개선된 구조를 제공합니다.
|
|
10
|
+
* 기존 VectorSearchEngine과 동일한 인터페이스를 제공하여 기존 코드 수정 없이 사용 가능하도록 합니다.
|
|
12
11
|
*/
|
|
13
12
|
export class VectorSearchEngineRefactored {
|
|
14
13
|
container;
|
|
@@ -16,13 +15,14 @@ export class VectorSearchEngineRefactored {
|
|
|
16
15
|
this.container = VectorSearchContainer.getInstance();
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
* 데이터베이스
|
|
18
|
+
* 벡터 검색 기능이 없으면 검색이 실패할 수 있으므로, 데이터베이스 연결을 설정하고 벡터 검색 기능의 사용 가능 여부를 확인합니다.
|
|
20
19
|
*/
|
|
21
20
|
initialize(db) {
|
|
22
21
|
this.container.setDatabase(db);
|
|
23
22
|
}
|
|
24
23
|
/**
|
|
25
|
-
*
|
|
24
|
+
* 쿼리 벡터와 유사한 메모리를 검색하여 의미적으로 관련된 결과를 제공합니다.
|
|
25
|
+
* 리팩토링된 서비스를 통해 개선된 검색 기능을 제공합니다.
|
|
26
26
|
*/
|
|
27
27
|
async search(queryVector, options = {}, provider = 'tfidf') {
|
|
28
28
|
const query = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search-engine-refactored.js","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-refactored.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vector-search-engine-refactored.js","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine-refactored.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAQzE;;;GAGG;AACH,MAAM,OAAO,4BAA4B;IAC/B,SAAS,CAAwB;IAEzC;QACE,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAqB;QAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,WAAqB,EACrB,UAAe,EAAE,EACjB,WAAmB,OAAO;QAE1B,MAAM,KAAK,GAAsB;YAC/B,WAAW;YACX,OAAO;YACP,QAAQ;SACT,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,WAAqB,EACrB,SAAiB,EACjB,UAAe,EAAE,EACjB,WAAmB,OAAO;QAE1B,MAAM,KAAK,GAAsB;YAC/B,WAAW;YACX,SAAS;YACT,OAAO;YACP,QAAQ;SACT,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,WAAqB,EACrB,aAAqB,EAAE;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,GAAG,CAAC,CAAC,QAAQ;IACtB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,4BAA4B,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,4BAA4B,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;IACtD,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 벡터
|
|
3
|
-
* sqlite-vec를
|
|
4
|
-
* Memento MCP Server의 핵심 벡터 검색
|
|
2
|
+
* 의미적 유사성을 기반으로 한 고성능 벡터 검색을 제공합니다.
|
|
3
|
+
* sqlite-vec를 사용하여 대용량 벡터 데이터에서도 빠른 유사도 검색을 수행합니다.
|
|
4
|
+
* Memento MCP Server의 핵심 벡터 검색 컴포넌트로서 의미 기반 검색 기능을 제공합니다.
|
|
5
5
|
*/
|
|
6
6
|
import Database from 'better-sqlite3';
|
|
7
7
|
export interface VectorSearchResult {
|
|
@@ -39,47 +39,52 @@ export declare class VectorSearchEngine {
|
|
|
39
39
|
private readonly defaultLimit;
|
|
40
40
|
constructor();
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* 각 임베딩 provider별로 다른 벡터 테이블을 사용하여 차원 불일치를 방지합니다.
|
|
43
|
+
* provider에 따라 적절한 테이블명을 반환하여 정확한 검색을 보장합니다.
|
|
43
44
|
*/
|
|
44
45
|
private getVectorTableName;
|
|
45
46
|
/**
|
|
46
|
-
* 데이터베이스
|
|
47
|
+
* 데이터베이스 연결을 설정하고 벡터 검색 기능의 사용 가능 여부를 확인합니다.
|
|
48
|
+
* provider별 차원 정보를 갱신하여 정확한 검색을 보장합니다.
|
|
47
49
|
*/
|
|
48
50
|
initialize(db: Database.Database): void;
|
|
49
51
|
/**
|
|
50
|
-
*
|
|
51
|
-
* sqlite-vec 확장 로드 여부와 테이블 존재를 모두
|
|
52
|
+
* 벡터 검색 기능이 실제로 사용 가능한지 확인하여 안전한 검색을 보장합니다.
|
|
53
|
+
* sqlite-vec 확장 로드 여부와 테이블 존재를 모두 확인하여 런타임 오류를 방지합니다.
|
|
52
54
|
*/
|
|
53
55
|
private checkVecAvailability;
|
|
54
56
|
/**
|
|
55
|
-
*
|
|
57
|
+
* 데이터베이스에 저장된 실제 임베딩 차원을 조회하여 정확한 벡터 검색을 보장합니다.
|
|
58
|
+
* provider별로 다른 차원을 사용할 수 있으므로 메타데이터에서 차원 정보를 갱신합니다.
|
|
56
59
|
*/
|
|
57
60
|
private refreshProviderDimensions;
|
|
58
61
|
/**
|
|
59
|
-
*
|
|
60
|
-
* @param provider - 임베딩 제공자
|
|
61
|
-
* @returns 실제 저장된 차원 또는 null
|
|
62
|
+
* 특정 provider의 실제 저장된 임베딩 차원을 조회하여 벡터 검색 시 차원 불일치를 방지합니다.
|
|
62
63
|
*/
|
|
63
64
|
private getActualStoredDimensions;
|
|
64
65
|
/**
|
|
65
|
-
*
|
|
66
|
+
* 쿼리 벡터와 유사한 메모리를 검색하여 의미적으로 관련된 결과를 제공합니다.
|
|
67
|
+
* sqlite-vec의 고성능 벡터 검색 기능을 활용하여 빠르고 정확한 검색을 수행합니다.
|
|
66
68
|
*/
|
|
67
69
|
search(queryVector: number[], options?: VectorSearchOptions, provider?: string): Promise<VectorSearchResult[]>;
|
|
68
70
|
/**
|
|
69
|
-
*
|
|
70
|
-
* SQLite 호환성을 위해 LEFT JOIN
|
|
71
|
+
* 벡터 검색과 메타데이터 검색을 결합하여 검색 정확도와 포괄성을 동시에 확보합니다.
|
|
72
|
+
* SQLite 호환성을 위해 LEFT JOIN을 사용하여 안정적인 검색을 보장합니다.
|
|
71
73
|
*/
|
|
72
74
|
hybridSearch(queryVector: number[], textQuery: string, options?: VectorSearchOptions, provider?: string): Promise<VectorSearchResult[]>;
|
|
73
75
|
/**
|
|
74
|
-
* 벡터 인덱스
|
|
76
|
+
* 벡터 검색 기능의 현재 상태를 확인하여 사용 가능 여부와 인덱스 정보를 제공합니다.
|
|
77
|
+
* 시스템 모니터링과 디버깅을 위해 인덱스 상태를 조회합니다.
|
|
75
78
|
*/
|
|
76
79
|
getIndexStatus(): VectorIndexStatus;
|
|
77
80
|
/**
|
|
78
|
-
* 벡터
|
|
81
|
+
* 벡터 인덱스를 재구성하여 검색 성능을 최적화합니다.
|
|
82
|
+
* sqlite-vec는 자동으로 인덱스를 관리하므로 수동 재구성이 필요 없는 경우를 처리합니다.
|
|
79
83
|
*/
|
|
80
84
|
rebuildIndex(): Promise<boolean>;
|
|
81
85
|
/**
|
|
82
|
-
* 벡터
|
|
86
|
+
* 벡터 검색의 성능을 측정하여 최적화 지점을 파악합니다.
|
|
87
|
+
* 반복 실행을 통해 평균, 최소, 최대 응답 시간과 성공률을 계산합니다.
|
|
83
88
|
*/
|
|
84
89
|
performanceTest(queryVector: number[], iterations?: number): Promise<{
|
|
85
90
|
averageTime: number;
|
|
@@ -89,15 +94,15 @@ export declare class VectorSearchEngine {
|
|
|
89
94
|
successRate: number;
|
|
90
95
|
}>;
|
|
91
96
|
/**
|
|
92
|
-
* 벡터 차원
|
|
97
|
+
* 특정 provider의 벡터 차원을 조회하여 벡터 검색 시 차원 정보를 제공합니다.
|
|
93
98
|
*/
|
|
94
99
|
getDimensions(provider?: string): number;
|
|
95
100
|
/**
|
|
96
|
-
*
|
|
101
|
+
* 벡터 검색 기능이 사용 가능한지 확인하여 호출자가 적절한 처리를 할 수 있도록 합니다.
|
|
97
102
|
*/
|
|
98
103
|
isAvailable(): boolean;
|
|
99
104
|
/**
|
|
100
|
-
* 데이터베이스 연결
|
|
105
|
+
* 데이터베이스 연결 상태를 확인하여 검색 실행 전 안전성을 보장합니다.
|
|
101
106
|
*/
|
|
102
107
|
isConnected(): boolean;
|
|
103
108
|
private safeParseTags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search-engine.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IACzC,OAAO,CAAC,kBAAkB,CAKxB;IACF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;;IAMnC
|
|
1
|
+
{"version":3,"file":"vector-search-engine.d.ts","sourceRoot":"","sources":["../../src/algorithms/vector-search-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IACzC,OAAO,CAAC,kBAAkB,CAKxB;IACF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;;IAMnC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAMvC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoE5B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;YACW,yBAAyB;IAqBvC;;;OAGG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,mBAAwB,EACjC,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqIhC;;;OAGG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,EACjC,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA+IhC;;;OAGG;IACH,cAAc,IAAI,iBAAiB;IAgDnC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBtC;;;OAGG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC;QAC7E,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAwCF;;OAEG;IACH,aAAa,CAAC,QAAQ,GAAE,MAAgB,GAAG,MAAM;IAIjD;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,qBAAqB;CAG9B;AAKD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|