agentdb 1.5.8 → 1.6.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 (62) hide show
  1. package/README.md +11 -11
  2. package/dist/agentdb.min.js +4 -4
  3. package/dist/cli/agentdb-cli.d.ts +29 -0
  4. package/dist/cli/agentdb-cli.d.ts.map +1 -1
  5. package/dist/cli/agentdb-cli.js +1009 -34
  6. package/dist/cli/agentdb-cli.js.map +1 -1
  7. package/dist/controllers/ContextSynthesizer.d.ts +65 -0
  8. package/dist/controllers/ContextSynthesizer.d.ts.map +1 -0
  9. package/dist/controllers/ContextSynthesizer.js +208 -0
  10. package/dist/controllers/ContextSynthesizer.js.map +1 -0
  11. package/dist/controllers/MMRDiversityRanker.d.ts +50 -0
  12. package/dist/controllers/MMRDiversityRanker.d.ts.map +1 -0
  13. package/dist/controllers/MMRDiversityRanker.js +130 -0
  14. package/dist/controllers/MMRDiversityRanker.js.map +1 -0
  15. package/dist/controllers/MetadataFilter.d.ts +70 -0
  16. package/dist/controllers/MetadataFilter.d.ts.map +1 -0
  17. package/dist/controllers/MetadataFilter.js +243 -0
  18. package/dist/controllers/MetadataFilter.js.map +1 -0
  19. package/dist/controllers/QUICClient.d.ts +109 -0
  20. package/dist/controllers/QUICClient.d.ts.map +1 -0
  21. package/dist/controllers/QUICClient.js +299 -0
  22. package/dist/controllers/QUICClient.js.map +1 -0
  23. package/dist/controllers/QUICServer.d.ts +121 -0
  24. package/dist/controllers/QUICServer.d.ts.map +1 -0
  25. package/dist/controllers/QUICServer.js +383 -0
  26. package/dist/controllers/QUICServer.js.map +1 -0
  27. package/dist/controllers/SyncCoordinator.d.ts +120 -0
  28. package/dist/controllers/SyncCoordinator.d.ts.map +1 -0
  29. package/dist/controllers/SyncCoordinator.js +441 -0
  30. package/dist/controllers/SyncCoordinator.js.map +1 -0
  31. package/dist/controllers/WASMVectorSearch.d.ts.map +1 -1
  32. package/dist/controllers/WASMVectorSearch.js +10 -2
  33. package/dist/controllers/WASMVectorSearch.js.map +1 -1
  34. package/dist/controllers/index.d.ts +12 -0
  35. package/dist/controllers/index.d.ts.map +1 -1
  36. package/dist/controllers/index.js +6 -0
  37. package/dist/controllers/index.js.map +1 -1
  38. package/dist/db-fallback.d.ts.map +1 -1
  39. package/dist/db-fallback.js +14 -11
  40. package/dist/db-fallback.js.map +1 -1
  41. package/dist/examples/quic-sync-example.d.ts +9 -0
  42. package/dist/examples/quic-sync-example.d.ts.map +1 -0
  43. package/dist/examples/quic-sync-example.js +169 -0
  44. package/dist/examples/quic-sync-example.js.map +1 -0
  45. package/dist/types/quic.d.ts +518 -0
  46. package/dist/types/quic.d.ts.map +1 -0
  47. package/dist/types/quic.js +272 -0
  48. package/dist/types/quic.js.map +1 -0
  49. package/package.json +9 -3
  50. package/src/browser-entry.js +41 -6
  51. package/src/cli/agentdb-cli.ts +1114 -33
  52. package/src/controllers/ContextSynthesizer.ts +285 -0
  53. package/src/controllers/MMRDiversityRanker.ts +187 -0
  54. package/src/controllers/MetadataFilter.ts +280 -0
  55. package/src/controllers/QUICClient.ts +413 -0
  56. package/src/controllers/QUICServer.ts +498 -0
  57. package/src/controllers/SyncCoordinator.ts +597 -0
  58. package/src/controllers/WASMVectorSearch.ts +11 -2
  59. package/src/controllers/index.ts +12 -0
  60. package/src/db-fallback.ts +13 -10
  61. package/src/examples/quic-sync-example.ts +198 -0
  62. package/src/types/quic.ts +772 -0
@@ -0,0 +1,383 @@
1
+ /**
2
+ * QUICServer - QUIC Protocol Server for AgentDB Synchronization
3
+ *
4
+ * Implements a QUIC server for receiving and handling synchronization requests
5
+ * from remote AgentDB instances. Supports episodes, skills, and edge synchronization.
6
+ *
7
+ * Features:
8
+ * - Start/stop server lifecycle management
9
+ * - Client connection handling
10
+ * - Authentication and authorization
11
+ * - Rate limiting per client
12
+ * - Sync request processing (episodes, skills, edges)
13
+ * - Comprehensive error handling and logging
14
+ */
15
+ import chalk from 'chalk';
16
+ export class QUICServer {
17
+ db;
18
+ config;
19
+ isRunning = false;
20
+ connections = new Map();
21
+ rateLimitState = new Map();
22
+ server = null;
23
+ cleanupInterval = null;
24
+ constructor(db, config = {}) {
25
+ this.db = db;
26
+ this.config = {
27
+ host: config.host || '0.0.0.0',
28
+ port: config.port || 4433,
29
+ maxConnections: config.maxConnections || 100,
30
+ authToken: config.authToken || '',
31
+ rateLimit: config.rateLimit || {
32
+ maxRequestsPerMinute: 60,
33
+ maxBytesPerMinute: 10 * 1024 * 1024, // 10MB
34
+ },
35
+ tlsConfig: config.tlsConfig || {},
36
+ };
37
+ }
38
+ /**
39
+ * Start the QUIC server
40
+ */
41
+ async start() {
42
+ if (this.isRunning) {
43
+ console.log(chalk.yellow('⚠️ QUIC server is already running'));
44
+ return;
45
+ }
46
+ try {
47
+ console.log(chalk.blue('🚀 Starting QUIC server...'));
48
+ console.log(chalk.gray(` Host: ${this.config.host}`));
49
+ console.log(chalk.gray(` Port: ${this.config.port}`));
50
+ // Note: Actual QUIC implementation would use a library like @fails-components/webtransport
51
+ // or node-quic. This is a reference implementation showing the interface.
52
+ // Initialize server state
53
+ this.isRunning = true;
54
+ this.startCleanupInterval();
55
+ console.log(chalk.green('✓ QUIC server started successfully'));
56
+ console.log(chalk.gray(` Max connections: ${this.config.maxConnections}`));
57
+ console.log(chalk.gray(` Rate limit: ${this.config.rateLimit.maxRequestsPerMinute} req/min`));
58
+ }
59
+ catch (error) {
60
+ const err = error;
61
+ console.error(chalk.red('✗ Failed to start QUIC server:'), err.message);
62
+ throw new Error(`QUIC server start failed: ${err.message}`);
63
+ }
64
+ }
65
+ /**
66
+ * Stop the QUIC server
67
+ */
68
+ async stop() {
69
+ if (!this.isRunning) {
70
+ console.log(chalk.yellow('⚠️ QUIC server is not running'));
71
+ return;
72
+ }
73
+ try {
74
+ console.log(chalk.blue('🛑 Stopping QUIC server...'));
75
+ // Close all connections
76
+ for (const [clientId, connection] of this.connections.entries()) {
77
+ console.log(chalk.gray(` Closing connection: ${clientId}`));
78
+ // Close connection logic here
79
+ }
80
+ this.connections.clear();
81
+ this.rateLimitState.clear();
82
+ // Stop cleanup interval
83
+ if (this.cleanupInterval) {
84
+ clearInterval(this.cleanupInterval);
85
+ this.cleanupInterval = null;
86
+ }
87
+ // Close server
88
+ if (this.server) {
89
+ // await this.server.close();
90
+ this.server = null;
91
+ }
92
+ this.isRunning = false;
93
+ console.log(chalk.green('✓ QUIC server stopped successfully'));
94
+ }
95
+ catch (error) {
96
+ const err = error;
97
+ console.error(chalk.red('✗ Error stopping QUIC server:'), err.message);
98
+ throw new Error(`QUIC server stop failed: ${err.message}`);
99
+ }
100
+ }
101
+ /**
102
+ * Handle incoming client connection
103
+ */
104
+ async handleConnection(clientId, address) {
105
+ // Check max connections
106
+ if (this.connections.size >= this.config.maxConnections) {
107
+ console.log(chalk.yellow(`⚠️ Max connections reached, rejecting ${clientId}`));
108
+ return false;
109
+ }
110
+ // Register connection
111
+ const connection = {
112
+ id: clientId,
113
+ address,
114
+ connectedAt: Date.now(),
115
+ requestCount: 0,
116
+ bytesReceived: 0,
117
+ lastRequestAt: 0,
118
+ };
119
+ this.connections.set(clientId, connection);
120
+ console.log(chalk.green(`✓ Client connected: ${clientId} from ${address}`));
121
+ console.log(chalk.gray(` Active connections: ${this.connections.size}`));
122
+ return true;
123
+ }
124
+ /**
125
+ * Authenticate client request
126
+ */
127
+ authenticate(clientId, authToken) {
128
+ if (!this.config.authToken) {
129
+ return true; // No auth required
130
+ }
131
+ const isValid = authToken === this.config.authToken;
132
+ if (!isValid) {
133
+ console.log(chalk.red(`✗ Authentication failed for client: ${clientId}`));
134
+ }
135
+ return isValid;
136
+ }
137
+ /**
138
+ * Check rate limits for client
139
+ */
140
+ checkRateLimit(clientId, requestSize) {
141
+ const now = Date.now();
142
+ let state = this.rateLimitState.get(clientId);
143
+ if (!state || now - state.windowStart > 60000) {
144
+ // New window
145
+ state = {
146
+ requestCount: 0,
147
+ bytesTransferred: 0,
148
+ windowStart: now,
149
+ };
150
+ this.rateLimitState.set(clientId, state);
151
+ }
152
+ // Check limits
153
+ if (state.requestCount >= this.config.rateLimit.maxRequestsPerMinute) {
154
+ console.log(chalk.yellow(`⚠️ Rate limit exceeded (requests) for ${clientId}`));
155
+ return false;
156
+ }
157
+ if (state.bytesTransferred + requestSize > this.config.rateLimit.maxBytesPerMinute) {
158
+ console.log(chalk.yellow(`⚠️ Rate limit exceeded (bytes) for ${clientId}`));
159
+ return false;
160
+ }
161
+ // Update state
162
+ state.requestCount++;
163
+ state.bytesTransferred += requestSize;
164
+ return true;
165
+ }
166
+ /**
167
+ * Process sync request from client
168
+ */
169
+ async processSyncRequest(clientId, request, authToken) {
170
+ try {
171
+ // Authenticate
172
+ if (!this.authenticate(clientId, authToken)) {
173
+ return {
174
+ success: false,
175
+ error: 'Authentication failed',
176
+ };
177
+ }
178
+ // Check rate limit
179
+ const requestSize = JSON.stringify(request).length;
180
+ if (!this.checkRateLimit(clientId, requestSize)) {
181
+ return {
182
+ success: false,
183
+ error: 'Rate limit exceeded',
184
+ };
185
+ }
186
+ // Update connection stats
187
+ const connection = this.connections.get(clientId);
188
+ if (connection) {
189
+ connection.requestCount++;
190
+ connection.bytesReceived += requestSize;
191
+ connection.lastRequestAt = Date.now();
192
+ }
193
+ console.log(chalk.blue(`📥 Processing sync request from ${clientId}`));
194
+ console.log(chalk.gray(` Type: ${request.type}`));
195
+ console.log(chalk.gray(` Since: ${request.since || 'full sync'}`));
196
+ // Process based on type
197
+ let data;
198
+ let count = 0;
199
+ switch (request.type) {
200
+ case 'episodes':
201
+ data = await this.syncEpisodes(request);
202
+ count = data.length;
203
+ break;
204
+ case 'skills':
205
+ data = await this.syncSkills(request);
206
+ count = data.length;
207
+ break;
208
+ case 'edges':
209
+ data = await this.syncEdges(request);
210
+ count = data.length;
211
+ break;
212
+ case 'full':
213
+ data = await this.syncFull(request);
214
+ count = data.episodes?.length + data.skills?.length + data.edges?.length || 0;
215
+ break;
216
+ default:
217
+ return {
218
+ success: false,
219
+ error: `Unknown sync type: ${request.type}`,
220
+ };
221
+ }
222
+ console.log(chalk.green(`✓ Sync completed: ${count} items sent`));
223
+ return {
224
+ success: true,
225
+ data,
226
+ count,
227
+ hasMore: false, // Could implement pagination here
228
+ };
229
+ }
230
+ catch (error) {
231
+ const err = error;
232
+ console.error(chalk.red('✗ Sync request failed:'), err.message);
233
+ return {
234
+ success: false,
235
+ error: err.message,
236
+ };
237
+ }
238
+ }
239
+ /**
240
+ * Sync episodes data
241
+ */
242
+ async syncEpisodes(request) {
243
+ const { since, filters, batchSize = 1000 } = request;
244
+ let query = 'SELECT * FROM episodes WHERE 1=1';
245
+ const params = [];
246
+ if (since) {
247
+ query += ' AND ts > ?';
248
+ params.push(since);
249
+ }
250
+ // Apply filters
251
+ if (filters) {
252
+ if (filters.sessionId) {
253
+ query += ' AND session_id = ?';
254
+ params.push(filters.sessionId);
255
+ }
256
+ if (filters.success !== undefined) {
257
+ query += ' AND success = ?';
258
+ params.push(filters.success ? 1 : 0);
259
+ }
260
+ }
261
+ query += ` ORDER BY ts DESC LIMIT ${batchSize}`;
262
+ const stmt = this.db.prepare(query);
263
+ const rows = stmt.all(...params);
264
+ return rows.map((row) => ({
265
+ id: row.id,
266
+ ts: row.ts,
267
+ sessionId: row.session_id,
268
+ task: row.task,
269
+ input: row.input,
270
+ output: row.output,
271
+ critique: row.critique,
272
+ reward: row.reward,
273
+ success: row.success === 1,
274
+ latencyMs: row.latency_ms,
275
+ tokensUsed: row.tokens_used,
276
+ tags: row.tags ? JSON.parse(row.tags) : [],
277
+ metadata: row.metadata ? JSON.parse(row.metadata) : {},
278
+ }));
279
+ }
280
+ /**
281
+ * Sync skills data
282
+ */
283
+ async syncSkills(request) {
284
+ const { since, batchSize = 1000 } = request;
285
+ let query = 'SELECT * FROM skills WHERE 1=1';
286
+ const params = [];
287
+ if (since) {
288
+ query += ' AND ts > ?';
289
+ params.push(since);
290
+ }
291
+ query += ` ORDER BY ts DESC LIMIT ${batchSize}`;
292
+ const stmt = this.db.prepare(query);
293
+ const rows = stmt.all(...params);
294
+ return rows.map((row) => ({
295
+ id: row.id,
296
+ ts: row.ts,
297
+ name: row.name,
298
+ description: row.description,
299
+ code: row.code,
300
+ successRate: row.success_rate,
301
+ usageCount: row.usage_count,
302
+ avgReward: row.avg_reward,
303
+ tags: row.tags ? JSON.parse(row.tags) : [],
304
+ metadata: row.metadata ? JSON.parse(row.metadata) : {},
305
+ }));
306
+ }
307
+ /**
308
+ * Sync edges (skill relationships)
309
+ */
310
+ async syncEdges(request) {
311
+ const { since, batchSize = 1000 } = request;
312
+ let query = 'SELECT * FROM skill_edges WHERE 1=1';
313
+ const params = [];
314
+ if (since) {
315
+ query += ' AND ts > ?';
316
+ params.push(since);
317
+ }
318
+ query += ` ORDER BY ts DESC LIMIT ${batchSize}`;
319
+ const stmt = this.db.prepare(query);
320
+ const rows = stmt.all(...params);
321
+ return rows.map((row) => ({
322
+ id: row.id,
323
+ ts: row.ts,
324
+ fromSkillId: row.from_skill_id,
325
+ toSkillId: row.to_skill_id,
326
+ weight: row.weight,
327
+ coOccurrences: row.co_occurrences,
328
+ }));
329
+ }
330
+ /**
331
+ * Full sync of all data
332
+ */
333
+ async syncFull(request) {
334
+ const [episodes, skills, edges] = await Promise.all([
335
+ this.syncEpisodes(request),
336
+ this.syncSkills(request),
337
+ this.syncEdges(request),
338
+ ]);
339
+ return {
340
+ episodes,
341
+ skills,
342
+ edges,
343
+ };
344
+ }
345
+ /**
346
+ * Start cleanup interval for stale connections
347
+ */
348
+ startCleanupInterval() {
349
+ this.cleanupInterval = setInterval(() => {
350
+ const now = Date.now();
351
+ const staleThreshold = 5 * 60 * 1000; // 5 minutes
352
+ for (const [clientId, connection] of this.connections.entries()) {
353
+ if (now - connection.lastRequestAt > staleThreshold && connection.requestCount > 0) {
354
+ console.log(chalk.gray(`🧹 Removing stale connection: ${clientId}`));
355
+ this.connections.delete(clientId);
356
+ this.rateLimitState.delete(clientId);
357
+ }
358
+ }
359
+ }, 60000); // Run every minute
360
+ }
361
+ /**
362
+ * Get server status
363
+ */
364
+ getStatus() {
365
+ let totalRequests = 0;
366
+ for (const connection of this.connections.values()) {
367
+ totalRequests += connection.requestCount;
368
+ }
369
+ return {
370
+ isRunning: this.isRunning,
371
+ activeConnections: this.connections.size,
372
+ totalRequests,
373
+ config: this.config,
374
+ };
375
+ }
376
+ /**
377
+ * Get connection info
378
+ */
379
+ getConnections() {
380
+ return Array.from(this.connections.values());
381
+ }
382
+ }
383
+ //# sourceMappingURL=QUICServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QUICServer.js","sourceRoot":"","sources":["../../src/controllers/QUICServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * SyncCoordinator - Orchestrate AgentDB Synchronization
3
+ *
4
+ * Coordinates bidirectional synchronization between local and remote AgentDB instances.
5
+ * Handles change detection, conflict resolution, batching, and progress tracking.
6
+ *
7
+ * Features:
8
+ * - Detect changes since last sync
9
+ * - Bidirectional sync (push and pull)
10
+ * - Conflict resolution strategies
11
+ * - Batch operations for efficiency
12
+ * - Progress tracking and reporting
13
+ * - Comprehensive error handling
14
+ * - Sync state persistence
15
+ */
16
+ import { QUICClient } from './QUICClient.js';
17
+ import { QUICServer } from './QUICServer.js';
18
+ type Database = any;
19
+ export interface SyncCoordinatorConfig {
20
+ db: Database;
21
+ client?: QUICClient;
22
+ server?: QUICServer;
23
+ conflictStrategy?: 'local-wins' | 'remote-wins' | 'latest-wins' | 'merge';
24
+ batchSize?: number;
25
+ autoSync?: boolean;
26
+ syncIntervalMs?: number;
27
+ }
28
+ export interface SyncState {
29
+ lastSyncAt: number;
30
+ lastEpisodeSync: number;
31
+ lastSkillSync: number;
32
+ lastEdgeSync: number;
33
+ totalItemsSynced: number;
34
+ totalBytesSynced: number;
35
+ syncCount: number;
36
+ lastError?: string;
37
+ }
38
+ export interface SyncProgress {
39
+ phase: 'detecting' | 'pushing' | 'pulling' | 'resolving' | 'applying' | 'completed' | 'error';
40
+ current: number;
41
+ total: number;
42
+ itemType?: string;
43
+ message?: string;
44
+ error?: string;
45
+ }
46
+ export interface SyncReport {
47
+ success: boolean;
48
+ startTime: number;
49
+ endTime: number;
50
+ durationMs: number;
51
+ itemsPushed: number;
52
+ itemsPulled: number;
53
+ conflictsResolved: number;
54
+ errors: string[];
55
+ bytesTransferred: number;
56
+ }
57
+ export declare class SyncCoordinator {
58
+ private db;
59
+ private client?;
60
+ private server?;
61
+ private config;
62
+ private syncState;
63
+ private isSyncing;
64
+ private autoSyncInterval;
65
+ constructor(config: SyncCoordinatorConfig);
66
+ /**
67
+ * Perform bidirectional synchronization
68
+ */
69
+ sync(onProgress?: (progress: SyncProgress) => void): Promise<SyncReport>;
70
+ /**
71
+ * Detect changes since last sync
72
+ */
73
+ private detectChanges;
74
+ /**
75
+ * Push local changes to remote
76
+ */
77
+ private pushChanges;
78
+ /**
79
+ * Pull changes from remote
80
+ */
81
+ private pullChanges;
82
+ /**
83
+ * Resolve conflicts between local and remote data
84
+ */
85
+ private resolveConflicts;
86
+ /**
87
+ * Apply pulled changes to local database
88
+ */
89
+ private applyChanges;
90
+ /**
91
+ * Load sync state from database
92
+ */
93
+ private loadSyncState;
94
+ /**
95
+ * Save sync state to database
96
+ */
97
+ private saveSyncState;
98
+ /**
99
+ * Start automatic synchronization
100
+ */
101
+ private startAutoSync;
102
+ /**
103
+ * Stop automatic synchronization
104
+ */
105
+ stopAutoSync(): void;
106
+ /**
107
+ * Get sync state
108
+ */
109
+ getSyncState(): SyncState;
110
+ /**
111
+ * Get sync status
112
+ */
113
+ getStatus(): {
114
+ isSyncing: boolean;
115
+ autoSyncEnabled: boolean;
116
+ state: SyncState;
117
+ };
118
+ }
119
+ export {};
120
+ //# sourceMappingURL=SyncCoordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncCoordinator.d.ts","sourceRoot":"","sources":["../../src/controllers/SyncCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,UAAU,EAA2B,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAC;AAG1D,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,QAAQ,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9F,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,MAAM,CAAoE;IAClF,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,MAAM,EAAE,qBAAqB;IAoBzC;;OAEG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IA0G9E;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,WAAW;IAezB;;OAEG;YACW,WAAW;IAuGzB;;OAEG;YACW,gBAAgB;IA4B9B;;OAEG;YACW,YAAY;IA2E1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAyCrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,YAAY,IAAI,IAAI;IAQpB;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,SAAS,IAAI;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,OAAO,CAAC;QACzB,KAAK,EAAE,SAAS,CAAC;KAClB;CAOF"}