a2a-memory 0.5.0 → 0.7.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.
- package/README.md +262 -45
- package/dist/adapters/anthropic.d.ts +69 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +116 -0
- package/dist/adapters/anthropic.js.map +1 -0
- package/dist/claude/sync.d.ts +57 -0
- package/dist/claude/sync.d.ts.map +1 -0
- package/dist/claude/sync.js +201 -0
- package/dist/claude/sync.js.map +1 -0
- package/dist/cli/commands/claude-sync.d.ts +11 -0
- package/dist/cli/commands/claude-sync.d.ts.map +1 -0
- package/dist/cli/commands/claude-sync.js +69 -0
- package/dist/cli/commands/claude-sync.js.map +1 -0
- package/dist/cli/commands/health.d.ts +8 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +108 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +55 -3
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +27 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts +9 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +74 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +5 -3
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +124 -21
- package/dist/db/database.js.map +1 -1
- package/dist/embedding/index.d.ts +1 -0
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +1 -0
- package/dist/embedding/index.js.map +1 -1
- package/dist/embedding/quantization.d.ts +34 -0
- package/dist/embedding/quantization.d.ts.map +1 -0
- package/dist/embedding/quantization.js +89 -0
- package/dist/embedding/quantization.js.map +1 -0
- package/dist/extraction/filter.d.ts.map +1 -1
- package/dist/extraction/filter.js +25 -3
- package/dist/extraction/filter.js.map +1 -1
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +64 -49
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +45 -28
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +21 -3
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/messages.d.ts +82 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +150 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/index.d.ts +18 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/index.d.ts +3 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +2 -0
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/tiering.d.ts +50 -0
- package/dist/lifecycle/tiering.d.ts.map +1 -0
- package/dist/lifecycle/tiering.js +235 -0
- package/dist/lifecycle/tiering.js.map +1 -0
- package/dist/sync/client.d.ts +34 -2
- package/dist/sync/client.d.ts.map +1 -1
- package/dist/sync/client.js +89 -10
- package/dist/sync/client.js.map +1 -1
- package/dist/sync/encryption.d.ts +72 -0
- package/dist/sync/encryption.d.ts.map +1 -0
- package/dist/sync/encryption.js +203 -0
- package/dist/sync/encryption.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/queue.d.ts +1 -5
- package/dist/sync/queue.d.ts.map +1 -1
- package/dist/sync/queue.js +28 -37
- package/dist/sync/queue.js.map +1 -1
- package/dist/sync/scheduler.d.ts +69 -0
- package/dist/sync/scheduler.d.ts.map +1 -0
- package/dist/sync/scheduler.js +140 -0
- package/dist/sync/scheduler.js.map +1 -0
- package/dist/sync/synchronizer.d.ts +3 -1
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +4 -2
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/types/index.d.ts +32 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +34 -4
- package/dist/types/index.js.map +1 -1
- package/dist/utils/keychain.d.ts +50 -0
- package/dist/utils/keychain.d.ts.map +1 -0
- package/dist/utils/keychain.js +166 -0
- package/dist/utils/keychain.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Tiering Engine
|
|
3
|
+
*
|
|
4
|
+
* 메모리 접근 패턴 기반 티어링 시스템:
|
|
5
|
+
* - hot: 최근 hotThresholdDays 이내 접근 OR tier='core'
|
|
6
|
+
* - warm: 최근 warmThresholdDays 이내 접근 OR tier='active'
|
|
7
|
+
* - cold: 나머지 (오래된 메모리)
|
|
8
|
+
*
|
|
9
|
+
* Cold 메모리는 zlib 압축으로 저장 공간 절약.
|
|
10
|
+
*/
|
|
11
|
+
import { gzipSync, gunzipSync } from 'node:zlib';
|
|
12
|
+
const COMPRESSED_PREFIX = 'COMPRESSED:';
|
|
13
|
+
/**
|
|
14
|
+
* 메모리 접근 패턴 기반 티어 결정
|
|
15
|
+
*
|
|
16
|
+
* 규칙:
|
|
17
|
+
* - tier='working' (core) → 항상 hot (강등 불가)
|
|
18
|
+
* - tier='episodic' (active) → 접근 시간과 관계없이 warm 이상
|
|
19
|
+
* - 나머지: lastAccessedAt 기준 hot/warm/cold 분류
|
|
20
|
+
*
|
|
21
|
+
* @param memory - 메모리 객체
|
|
22
|
+
* @param config - 티어링 설정
|
|
23
|
+
* @returns 결정된 storage tier
|
|
24
|
+
*/
|
|
25
|
+
export function determineTier(memory, config) {
|
|
26
|
+
// core 티어는 항상 hot
|
|
27
|
+
if (memory.tier === 'working') {
|
|
28
|
+
return 'hot';
|
|
29
|
+
}
|
|
30
|
+
// episodic 티어는 최소 warm 보장 (접근 시간 무관)
|
|
31
|
+
if (memory.tier === 'episodic') {
|
|
32
|
+
// 단, 접근 기록이 있으면 hot 승격 가능
|
|
33
|
+
if (memory.lastAccessedAt) {
|
|
34
|
+
const daysSinceAccess = getDaysSince(memory.lastAccessedAt);
|
|
35
|
+
if (daysSinceAccess <= config.hotThresholdDays) {
|
|
36
|
+
return 'hot';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return 'warm';
|
|
40
|
+
}
|
|
41
|
+
// semantic 티어: 접근 패턴 기반
|
|
42
|
+
if (!memory.lastAccessedAt) {
|
|
43
|
+
// 접근 기록 없음 → createdAt 기준
|
|
44
|
+
const daysSinceCreation = getDaysSince(memory.createdAt);
|
|
45
|
+
if (daysSinceCreation <= config.hotThresholdDays) {
|
|
46
|
+
return 'hot';
|
|
47
|
+
}
|
|
48
|
+
if (daysSinceCreation <= config.warmThresholdDays) {
|
|
49
|
+
return 'warm';
|
|
50
|
+
}
|
|
51
|
+
return 'cold';
|
|
52
|
+
}
|
|
53
|
+
const daysSinceAccess = getDaysSince(memory.lastAccessedAt);
|
|
54
|
+
if (daysSinceAccess <= config.hotThresholdDays) {
|
|
55
|
+
return 'hot';
|
|
56
|
+
}
|
|
57
|
+
if (daysSinceAccess <= config.warmThresholdDays) {
|
|
58
|
+
return 'warm';
|
|
59
|
+
}
|
|
60
|
+
return 'cold';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 전체 메모리 티어 재계산 및 재배치
|
|
64
|
+
*
|
|
65
|
+
* 1. 모든 메모리의 적절한 티어 결정
|
|
66
|
+
* 2. 현재 티어와 비교하여 승격/강등 카운트
|
|
67
|
+
* 3. cold 티어 메모리 압축 (설정 활성화 시)
|
|
68
|
+
* 4. DB 업데이트
|
|
69
|
+
*
|
|
70
|
+
* @param db - 메모리 데이터베이스
|
|
71
|
+
* @param config - 티어링 설정
|
|
72
|
+
* @returns 티어링 결과 (승격/강등/압축 수)
|
|
73
|
+
*/
|
|
74
|
+
export function rebalanceTiers(db, config) {
|
|
75
|
+
if (!config.enabled) {
|
|
76
|
+
return { promoted: 0, demoted: 0, compressed: 0, totalProcessed: 0 };
|
|
77
|
+
}
|
|
78
|
+
const allMemories = db.listMemories({ limit: 999999 });
|
|
79
|
+
let promoted = 0;
|
|
80
|
+
let demoted = 0;
|
|
81
|
+
let compressed = 0;
|
|
82
|
+
for (const memory of allMemories) {
|
|
83
|
+
const currentTier = getStorageTier(memory);
|
|
84
|
+
const targetTier = determineTier(memory, config);
|
|
85
|
+
// 티어 변경 필요 여부 확인
|
|
86
|
+
if (currentTier === targetTier) {
|
|
87
|
+
// 티어 변경 없음, 압축 상태만 확인
|
|
88
|
+
if (targetTier === 'cold' && config.coldCompressionEnabled) {
|
|
89
|
+
if (!isCompressed(memory.content)) {
|
|
90
|
+
const compressedContent = compressContent(memory.content);
|
|
91
|
+
db.updateMemory(memory.id, { content: compressedContent });
|
|
92
|
+
compressed++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// 티어 변경 필요
|
|
98
|
+
const tierRank = { hot: 2, warm: 1, cold: 0 };
|
|
99
|
+
if (tierRank[targetTier] > tierRank[currentTier]) {
|
|
100
|
+
promoted++;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
demoted++;
|
|
104
|
+
}
|
|
105
|
+
// content 압축/해제 처리
|
|
106
|
+
let newContent = memory.content;
|
|
107
|
+
if (targetTier === 'cold' && config.coldCompressionEnabled) {
|
|
108
|
+
// cold로 강등 → 압축
|
|
109
|
+
if (!isCompressed(memory.content)) {
|
|
110
|
+
newContent = compressContent(memory.content);
|
|
111
|
+
compressed++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (currentTier === 'cold' && isCompressed(memory.content)) {
|
|
115
|
+
// cold에서 승격 → 압축 해제
|
|
116
|
+
newContent = decompressContent(memory.content);
|
|
117
|
+
}
|
|
118
|
+
// 메타데이터 업데이트 (storage tier는 메타데이터로 추적)
|
|
119
|
+
// Memory.tier는 semantic tier이므로 변경하지 않음
|
|
120
|
+
// storage tier는 별도 필드나 tags로 관리 필요
|
|
121
|
+
// 현재 구현에서는 content만 압축/해제 처리
|
|
122
|
+
if (newContent !== memory.content) {
|
|
123
|
+
db.updateMemory(memory.id, { content: newContent });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
promoted,
|
|
128
|
+
demoted,
|
|
129
|
+
compressed,
|
|
130
|
+
totalProcessed: allMemories.length,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 메모리 접근 시 자동 승격
|
|
135
|
+
*
|
|
136
|
+
* autoPromote 설정이 활성화되어 있고,
|
|
137
|
+
* 현재 cold/warm 티어인 메모리를 hot으로 승격합니다.
|
|
138
|
+
*
|
|
139
|
+
* @param db - 메모리 데이터베이스
|
|
140
|
+
* @param memoryId - 메모리 ID
|
|
141
|
+
* @param config - 티어링 설정
|
|
142
|
+
*/
|
|
143
|
+
export function promoteOnAccess(db, memoryId, config) {
|
|
144
|
+
if (!config.enabled || !config.autoPromote) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// DB에서 조회하지 않고, 이미 조회된 메모리를 받아 처리하는 것이 효율적이지만
|
|
148
|
+
// 현재 API 구조상 id만 받으므로 재조회 필요
|
|
149
|
+
const memory = db.getMemory(memoryId);
|
|
150
|
+
if (!memory) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const currentTier = getStorageTier(memory);
|
|
154
|
+
const targetTier = determineTier(memory, config);
|
|
155
|
+
// hot으로 승격 필요한 경우
|
|
156
|
+
if (targetTier === 'hot' && currentTier !== 'hot') {
|
|
157
|
+
// 압축 해제
|
|
158
|
+
if (isCompressed(memory.content)) {
|
|
159
|
+
const decompressedContent = decompressContent(memory.content);
|
|
160
|
+
db.updateMemory(memoryId, { content: decompressedContent });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// ============================
|
|
165
|
+
// Helper Functions
|
|
166
|
+
// ============================
|
|
167
|
+
/**
|
|
168
|
+
* 메모리의 현재 storage tier 추정
|
|
169
|
+
* (실제로는 별도 필드가 필요하지만, 현재는 압축 여부로 판단)
|
|
170
|
+
*/
|
|
171
|
+
function getStorageTier(memory) {
|
|
172
|
+
// core는 항상 hot
|
|
173
|
+
if (memory.tier === 'working') {
|
|
174
|
+
return 'hot';
|
|
175
|
+
}
|
|
176
|
+
// 압축되어 있으면 cold
|
|
177
|
+
if (isCompressed(memory.content)) {
|
|
178
|
+
return 'cold';
|
|
179
|
+
}
|
|
180
|
+
// episodic은 기본 warm
|
|
181
|
+
if (memory.tier === 'episodic') {
|
|
182
|
+
return 'warm';
|
|
183
|
+
}
|
|
184
|
+
// semantic은 접근 패턴 기반 추정
|
|
185
|
+
if (!memory.lastAccessedAt) {
|
|
186
|
+
const daysSinceCreation = getDaysSince(memory.createdAt);
|
|
187
|
+
if (daysSinceCreation <= 7)
|
|
188
|
+
return 'hot';
|
|
189
|
+
if (daysSinceCreation <= 30)
|
|
190
|
+
return 'warm';
|
|
191
|
+
return 'cold';
|
|
192
|
+
}
|
|
193
|
+
const daysSinceAccess = getDaysSince(memory.lastAccessedAt);
|
|
194
|
+
if (daysSinceAccess <= 7)
|
|
195
|
+
return 'hot';
|
|
196
|
+
if (daysSinceAccess <= 30)
|
|
197
|
+
return 'warm';
|
|
198
|
+
return 'cold';
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* ISO 8601 문자열에서 현재까지의 일수 계산
|
|
202
|
+
*/
|
|
203
|
+
function getDaysSince(isoDate) {
|
|
204
|
+
const date = new Date(isoDate);
|
|
205
|
+
const now = new Date();
|
|
206
|
+
const diffMs = now.getTime() - date.getTime();
|
|
207
|
+
return Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* content가 압축되어 있는지 확인
|
|
211
|
+
*/
|
|
212
|
+
function isCompressed(content) {
|
|
213
|
+
return content.startsWith(COMPRESSED_PREFIX);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* content 압축 (zlib gzip)
|
|
217
|
+
*/
|
|
218
|
+
function compressContent(content) {
|
|
219
|
+
const buffer = Buffer.from(content, 'utf-8');
|
|
220
|
+
const compressed = gzipSync(buffer);
|
|
221
|
+
return COMPRESSED_PREFIX + compressed.toString('base64');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* content 압축 해제
|
|
225
|
+
*/
|
|
226
|
+
function decompressContent(content) {
|
|
227
|
+
if (!isCompressed(content)) {
|
|
228
|
+
return content;
|
|
229
|
+
}
|
|
230
|
+
const base64Data = content.slice(COMPRESSED_PREFIX.length);
|
|
231
|
+
const compressed = Buffer.from(base64Data, 'base64');
|
|
232
|
+
const decompressed = gunzipSync(compressed);
|
|
233
|
+
return decompressed.toString('utf-8');
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=tiering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiering.js","sourceRoot":"","sources":["../../src/lifecycle/tiering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIjD,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAqB;IACjE,kBAAkB;IAClB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,0BAA0B;QAC1B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5D,IAAI,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE5D,IAAI,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,eAAe,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,EAAkB,EAAE,MAAqB;IACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjD,iBAAiB;QACjB,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,sBAAsB;YACtB,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAC3D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClC,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC1D,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAC3D,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,QAAQ,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,mBAAmB;QACnB,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QAEhC,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAC3D,gBAAgB;YAChB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7C,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,KAAK,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,oBAAoB;YACpB,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,uCAAuC;QACvC,wCAAwC;QACxC,mCAAmC;QACnC,6BAA6B;QAC7B,IAAI,UAAU,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,OAAO;QACP,UAAU;QACV,cAAc,EAAE,WAAW,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAkB,EAClB,QAAgB,EAChB,MAAqB;IAErB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,6BAA6B;IAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjD,kBAAkB;IAClB,IAAI,UAAU,KAAK,KAAK,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAClD,QAAQ;QACR,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED,+BAA+B;AAC/B,mBAAmB;AACnB,+BAA+B;AAE/B;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,eAAe;IACf,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,iBAAiB,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,iBAAiB,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC5D,IAAI,eAAe,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,eAAe,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/sync/client.d.ts
CHANGED
|
@@ -24,7 +24,20 @@ export interface RemoteMemory {
|
|
|
24
24
|
export declare class A2AClient {
|
|
25
25
|
private config;
|
|
26
26
|
private timeout;
|
|
27
|
+
private encryptionKey;
|
|
27
28
|
constructor(config: A2AClientConfig);
|
|
29
|
+
/**
|
|
30
|
+
* 암호화 키 설정
|
|
31
|
+
*/
|
|
32
|
+
setEncryptionKey(key: Buffer): void;
|
|
33
|
+
/**
|
|
34
|
+
* 암호화 키 해제
|
|
35
|
+
*/
|
|
36
|
+
clearEncryptionKey(): void;
|
|
37
|
+
/**
|
|
38
|
+
* 암호화 활성화 여부
|
|
39
|
+
*/
|
|
40
|
+
isEncryptionEnabled(): boolean;
|
|
28
41
|
/**
|
|
29
42
|
* 메모리 생성
|
|
30
43
|
*/
|
|
@@ -49,6 +62,10 @@ export declare class A2AClient {
|
|
|
49
62
|
offset?: number;
|
|
50
63
|
includeEmbedding?: boolean;
|
|
51
64
|
}): Promise<RemoteMemory[]>;
|
|
65
|
+
/**
|
|
66
|
+
* 메모리 복호화 헬퍼
|
|
67
|
+
*/
|
|
68
|
+
private decryptMemory;
|
|
52
69
|
/**
|
|
53
70
|
* 메모리 업데이트
|
|
54
71
|
*/
|
|
@@ -96,6 +113,20 @@ export declare class A2AClient {
|
|
|
96
113
|
* Delta 적용
|
|
97
114
|
*/
|
|
98
115
|
applyDelta(teamPath: string, memoryId: string, delta: unknown): Promise<unknown>;
|
|
116
|
+
/**
|
|
117
|
+
* 배치 메모리 생성 (최대 100개/요청)
|
|
118
|
+
*/
|
|
119
|
+
createMemoriesBatch(items: Array<{
|
|
120
|
+
content: string;
|
|
121
|
+
category: string;
|
|
122
|
+
tier?: string;
|
|
123
|
+
tags?: string[];
|
|
124
|
+
}>): Promise<{
|
|
125
|
+
created: number;
|
|
126
|
+
failed: number;
|
|
127
|
+
ids: string[];
|
|
128
|
+
errors: string[];
|
|
129
|
+
}>;
|
|
99
130
|
/**
|
|
100
131
|
* 연결 테스트
|
|
101
132
|
*/
|
|
@@ -118,9 +149,10 @@ export declare class A2AClient {
|
|
|
118
149
|
*/
|
|
119
150
|
reinforceMemory(id: string): Promise<RemoteMemory>;
|
|
120
151
|
/**
|
|
121
|
-
* 메모리 승격 (
|
|
152
|
+
* 메모리 승격 (semantic tier로 고정)
|
|
153
|
+
* NOTE: 서버는 target_tier 파라미터를 무시하고 항상 semantic으로 승격합니다.
|
|
122
154
|
*/
|
|
123
|
-
promoteMemory(id: string,
|
|
155
|
+
promoteMemory(id: string, _targetTier?: string): Promise<RemoteMemory>;
|
|
124
156
|
/**
|
|
125
157
|
* 통계 조회
|
|
126
158
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/client.js
CHANGED
|
@@ -2,24 +2,61 @@
|
|
|
2
2
|
* A2A API Client
|
|
3
3
|
* Node.js 내장 fetch 사용 (외부 의존성 없음)
|
|
4
4
|
*/
|
|
5
|
+
import { encryptContent, decryptContent, wrapEncryptedContent, unwrapEncryptedContent, } from './encryption.js';
|
|
5
6
|
export class A2AClient {
|
|
6
7
|
config;
|
|
7
8
|
timeout;
|
|
9
|
+
encryptionKey = null;
|
|
8
10
|
constructor(config) {
|
|
9
11
|
this.config = config;
|
|
10
12
|
this.timeout = config.timeout ?? 10000;
|
|
11
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* 암호화 키 설정
|
|
16
|
+
*/
|
|
17
|
+
setEncryptionKey(key) {
|
|
18
|
+
if (key.length !== 32) {
|
|
19
|
+
throw new Error('암호화 키는 32 bytes여야 합니다');
|
|
20
|
+
}
|
|
21
|
+
this.encryptionKey = key;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 암호화 키 해제
|
|
25
|
+
*/
|
|
26
|
+
clearEncryptionKey() {
|
|
27
|
+
this.encryptionKey = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 암호화 활성화 여부
|
|
31
|
+
*/
|
|
32
|
+
isEncryptionEnabled() {
|
|
33
|
+
return this.encryptionKey !== null;
|
|
34
|
+
}
|
|
12
35
|
/**
|
|
13
36
|
* 메모리 생성
|
|
14
37
|
*/
|
|
15
38
|
async createMemory(input) {
|
|
39
|
+
let contentToSend = input.content;
|
|
40
|
+
// 암호화가 활성화된 경우
|
|
41
|
+
if (this.encryptionKey) {
|
|
42
|
+
const encrypted = encryptContent(input.content, this.encryptionKey);
|
|
43
|
+
contentToSend = wrapEncryptedContent(encrypted);
|
|
44
|
+
}
|
|
16
45
|
const response = await this.request('POST', '/api/v1/memories', {
|
|
17
|
-
content:
|
|
46
|
+
content: contentToSend,
|
|
18
47
|
category: input.category,
|
|
19
48
|
tier: input.tier,
|
|
20
49
|
tags: input.tags ?? [],
|
|
21
50
|
});
|
|
22
|
-
|
|
51
|
+
const memory = response;
|
|
52
|
+
// 응답 복호화
|
|
53
|
+
if (this.encryptionKey && memory.content) {
|
|
54
|
+
const unwrapped = unwrapEncryptedContent(memory.content);
|
|
55
|
+
if (unwrapped) {
|
|
56
|
+
memory.content = decryptContent(unwrapped, this.encryptionKey);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return memory;
|
|
23
60
|
}
|
|
24
61
|
/**
|
|
25
62
|
* 메모리 검색
|
|
@@ -45,7 +82,33 @@ export class A2AClient {
|
|
|
45
82
|
params.set('include_embedding', 'true');
|
|
46
83
|
const path = `/api/v1/memories${params.toString() ? `?${params.toString()}` : ''}`;
|
|
47
84
|
const response = await this.request('GET', path);
|
|
48
|
-
|
|
85
|
+
const memories = response.items ?? [];
|
|
86
|
+
// 복호화
|
|
87
|
+
if (this.encryptionKey) {
|
|
88
|
+
return memories.map(memory => this.decryptMemory(memory));
|
|
89
|
+
}
|
|
90
|
+
return memories;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 메모리 복호화 헬퍼
|
|
94
|
+
*/
|
|
95
|
+
decryptMemory(memory) {
|
|
96
|
+
if (!this.encryptionKey)
|
|
97
|
+
return memory;
|
|
98
|
+
const decrypted = { ...memory };
|
|
99
|
+
// content 복호화
|
|
100
|
+
if (decrypted.content) {
|
|
101
|
+
const unwrapped = unwrapEncryptedContent(decrypted.content);
|
|
102
|
+
if (unwrapped) {
|
|
103
|
+
try {
|
|
104
|
+
decrypted.content = decryptContent(unwrapped, this.encryptionKey);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// 복호화 실패 시 원본 유지 (암호화되지 않은 데이터일 수 있음)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return decrypted;
|
|
49
112
|
}
|
|
50
113
|
/**
|
|
51
114
|
* 메모리 업데이트
|
|
@@ -68,6 +131,9 @@ export class A2AClient {
|
|
|
68
131
|
*/
|
|
69
132
|
async listTeams() {
|
|
70
133
|
const response = await this.request('GET', '/api/v1/teams');
|
|
134
|
+
// 서버는 직접 배열 반환 (items 래퍼 없음)
|
|
135
|
+
if (Array.isArray(response))
|
|
136
|
+
return response;
|
|
71
137
|
return response.items ?? [];
|
|
72
138
|
}
|
|
73
139
|
/**
|
|
@@ -110,6 +176,13 @@ export class A2AClient {
|
|
|
110
176
|
async applyDelta(teamPath, memoryId, delta) {
|
|
111
177
|
return this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/sync/apply`, { memory_id: memoryId, delta });
|
|
112
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* 배치 메모리 생성 (최대 100개/요청)
|
|
181
|
+
*/
|
|
182
|
+
async createMemoriesBatch(items) {
|
|
183
|
+
const response = await this.request('POST', '/api/v1/memories/batch', { items });
|
|
184
|
+
return response;
|
|
185
|
+
}
|
|
113
186
|
/**
|
|
114
187
|
* 연결 테스트
|
|
115
188
|
*/
|
|
@@ -146,12 +219,11 @@ export class A2AClient {
|
|
|
146
219
|
return response;
|
|
147
220
|
}
|
|
148
221
|
/**
|
|
149
|
-
* 메모리 승격 (
|
|
222
|
+
* 메모리 승격 (semantic tier로 고정)
|
|
223
|
+
* NOTE: 서버는 target_tier 파라미터를 무시하고 항상 semantic으로 승격합니다.
|
|
150
224
|
*/
|
|
151
|
-
async promoteMemory(id,
|
|
152
|
-
const response = await this.request('POST', `/api/v1/memories/${id}/promote
|
|
153
|
-
target_tier: targetTier,
|
|
154
|
-
});
|
|
225
|
+
async promoteMemory(id, _targetTier) {
|
|
226
|
+
const response = await this.request('POST', `/api/v1/memories/${id}/promote`);
|
|
155
227
|
return response;
|
|
156
228
|
}
|
|
157
229
|
/**
|
|
@@ -175,8 +247,15 @@ export class A2AClient {
|
|
|
175
247
|
* 팀 통계 조회
|
|
176
248
|
*/
|
|
177
249
|
async getTeamStats(teamPath) {
|
|
178
|
-
|
|
179
|
-
|
|
250
|
+
// team.py: GET /teams/{team_path}/memories/stats
|
|
251
|
+
const response = await this.request('GET', `/teams/${encodeURIComponent(teamPath)}/memories/stats`);
|
|
252
|
+
const data = response;
|
|
253
|
+
const stats = data.stats ?? data;
|
|
254
|
+
return {
|
|
255
|
+
totalMemories: stats.total_memories ?? 0,
|
|
256
|
+
totalNodes: stats.total_nodes ?? 0,
|
|
257
|
+
lastSyncedAt: stats.last_synced_at ?? null,
|
|
258
|
+
};
|
|
180
259
|
}
|
|
181
260
|
/**
|
|
182
261
|
* HTTP 요청 실행
|
package/dist/sync/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2E Encryption Module
|
|
3
|
+
*
|
|
4
|
+
* AES-256-GCM 대칭 암호화를 사용하여 메모리 content/embedding 보호
|
|
5
|
+
* Node.js 내장 crypto 모듈만 사용 (외부 의존성 없음)
|
|
6
|
+
*/
|
|
7
|
+
export interface EncryptedPayload {
|
|
8
|
+
ciphertext: string;
|
|
9
|
+
iv: string;
|
|
10
|
+
tag: string;
|
|
11
|
+
}
|
|
12
|
+
export interface EncryptionConfig {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
algorithm: 'aes-256-gcm';
|
|
15
|
+
}
|
|
16
|
+
export interface KeyDerivationResult {
|
|
17
|
+
key: Buffer;
|
|
18
|
+
salt: Buffer;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 랜덤 암호화 키 생성 (32 bytes)
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateEncryptionKey(): Buffer;
|
|
24
|
+
/**
|
|
25
|
+
* PBKDF2로 사용자 비밀번호에서 키 유도
|
|
26
|
+
* @param password - 사용자 입력 비밀번호
|
|
27
|
+
* @param salt - 선택적 salt (재현성 필요 시 제공)
|
|
28
|
+
* @returns 키와 salt
|
|
29
|
+
*/
|
|
30
|
+
export declare function deriveKey(password: string, salt?: Buffer): KeyDerivationResult;
|
|
31
|
+
/**
|
|
32
|
+
* 텍스트 암호화 (AES-256-GCM)
|
|
33
|
+
* @param plaintext - 원본 텍스트
|
|
34
|
+
* @param key - 32 bytes 암호화 키
|
|
35
|
+
* @returns 암호화된 페이로드
|
|
36
|
+
*/
|
|
37
|
+
export declare function encryptContent(plaintext: string, key: Buffer): EncryptedPayload;
|
|
38
|
+
/**
|
|
39
|
+
* 텍스트 복호화 (AES-256-GCM)
|
|
40
|
+
* @param encrypted - 암호화된 페이로드
|
|
41
|
+
* @param key - 32 bytes 암호화 키
|
|
42
|
+
* @returns 원본 텍스트
|
|
43
|
+
* @throws 키가 잘못되었거나 데이터가 변조된 경우
|
|
44
|
+
*/
|
|
45
|
+
export declare function decryptContent(encrypted: EncryptedPayload, key: Buffer): string;
|
|
46
|
+
/**
|
|
47
|
+
* 임베딩 벡터 암호화
|
|
48
|
+
* @param embedding - number[] 벡터
|
|
49
|
+
* @param key - 32 bytes 암호화 키
|
|
50
|
+
* @returns base64 암호화된 문자열
|
|
51
|
+
*/
|
|
52
|
+
export declare function encryptEmbedding(embedding: number[], key: Buffer): string;
|
|
53
|
+
/**
|
|
54
|
+
* 임베딩 벡터 복호화
|
|
55
|
+
* @param encrypted - base64 암호화된 문자열
|
|
56
|
+
* @param key - 32 bytes 암호화 키
|
|
57
|
+
* @returns number[] 벡터
|
|
58
|
+
*/
|
|
59
|
+
export declare function decryptEmbedding(encrypted: string, key: Buffer): number[];
|
|
60
|
+
/**
|
|
61
|
+
* EncryptedPayload 검증
|
|
62
|
+
*/
|
|
63
|
+
export declare function isValidEncryptedPayload(obj: unknown): obj is EncryptedPayload;
|
|
64
|
+
/**
|
|
65
|
+
* 암호화된 컨텐츠를 JSON으로 래핑
|
|
66
|
+
*/
|
|
67
|
+
export declare function wrapEncryptedContent(encrypted: EncryptedPayload): string;
|
|
68
|
+
/**
|
|
69
|
+
* JSON에서 암호화된 컨텐츠 추출
|
|
70
|
+
*/
|
|
71
|
+
export declare function unwrapEncryptedContent(wrapped: string): EncryptedPayload | null;
|
|
72
|
+
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/sync/encryption.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAe9E;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAqB/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAyB/E;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCzE;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAS7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAOxE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAqB/E"}
|