page-action-cache 2.0.9 → 2026.2.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 (44) hide show
  1. package/README.md +100 -306
  2. package/openclaw.plugin.json +23 -14
  3. package/package.json +28 -21
  4. package/dist/browser-action-executor.d.ts +0 -87
  5. package/dist/browser-action-executor.d.ts.map +0 -1
  6. package/dist/browser-action-executor.js +0 -283
  7. package/dist/browser-action-executor.js.map +0 -1
  8. package/dist/cache-invalidation.d.ts +0 -129
  9. package/dist/cache-invalidation.d.ts.map +0 -1
  10. package/dist/cache-invalidation.js +0 -266
  11. package/dist/cache-invalidation.js.map +0 -1
  12. package/dist/cache-manager.d.ts +0 -83
  13. package/dist/cache-manager.d.ts.map +0 -1
  14. package/dist/cache-manager.js +0 -184
  15. package/dist/cache-manager.js.map +0 -1
  16. package/dist/index.d.ts +0 -11
  17. package/dist/index.d.ts.map +0 -1
  18. package/dist/index.js +0 -408
  19. package/dist/index.js.map +0 -1
  20. package/dist/multi-level-cache.d.ts +0 -127
  21. package/dist/multi-level-cache.d.ts.map +0 -1
  22. package/dist/multi-level-cache.js +0 -364
  23. package/dist/multi-level-cache.js.map +0 -1
  24. package/dist/scenario-recognizer.d.ts +0 -35
  25. package/dist/scenario-recognizer.d.ts.map +0 -1
  26. package/dist/scenario-recognizer.js +0 -93
  27. package/dist/scenario-recognizer.js.map +0 -1
  28. package/dist/types.d.ts +0 -62
  29. package/dist/types.d.ts.map +0 -1
  30. package/dist/types.js +0 -6
  31. package/dist/types.js.map +0 -1
  32. package/dist/variable-extractor.d.ts +0 -56
  33. package/dist/variable-extractor.d.ts.map +0 -1
  34. package/dist/variable-extractor.js +0 -161
  35. package/dist/variable-extractor.js.map +0 -1
  36. package/src/browser-action-executor.ts +0 -337
  37. package/src/cache-invalidation.ts +0 -342
  38. package/src/cache-manager.ts +0 -211
  39. package/src/index.ts +0 -468
  40. package/src/multi-level-cache.ts +0 -480
  41. package/src/scenario-recognizer.ts +0 -121
  42. package/src/types-mock.d.ts +0 -18
  43. package/src/types.ts +0 -66
  44. package/src/variable-extractor.ts +0 -206
package/dist/index.js DELETED
@@ -1,408 +0,0 @@
1
- /**
2
- * Page Action Cache - OpenClaw Extension
3
- * 页面操作缓存扩展 - OpenClaw 扩展
4
- */
5
- import { scenarioRecognizer } from './scenario-recognizer.js';
6
- import { multiLevelCache } from './multi-level-cache.js';
7
- import { cacheInvalidation } from './cache-invalidation.js';
8
- import { browserActionExecutor } from './browser-action-executor.js';
9
- /**
10
- * 主扩展入口
11
- */
12
- export function register(api) {
13
- console.log('[PageActionCache] Initializing extension...');
14
- // 获取插件配置 - 详细日志
15
- const rawConfig = api.getConfig?.();
16
- console.log('[PageActionCache] Raw config object:', JSON.stringify(rawConfig, null, 2));
17
- // 检查配置对象是否有效
18
- let config = rawConfig;
19
- if (!config || typeof config !== 'object') {
20
- console.log('[PageActionCache] Invalid config object type:', typeof rawConfig);
21
- // 配置无效,使用空对象继续
22
- config = {};
23
- }
24
- const pluginConfig = config?.plugins?.entries?.['page-action-cache'] ?? {};
25
- console.log('[PageActionCache] Plugin config for page-action-cache:', JSON.stringify(pluginConfig, null, 2));
26
- const pageActionCacheConfig = pluginConfig ?? {};
27
- console.log('[PageActionCache] Parsed pageActionCacheConfig:', JSON.stringify(pageActionCacheConfig, null, 2));
28
- const enabled = pageActionCacheConfig.enabled !== false;
29
- console.log('[PageActionCache] Enabled status:', enabled);
30
- if (!enabled) {
31
- console.log('[PageActionCache] Extension disabled by configuration');
32
- return;
33
- }
34
- console.log('[PageActionCache] Extension enabled, proceeding with tool registration...');
35
- // 应用配置
36
- if (pageActionCacheConfig.cacheLevelStrategy) {
37
- multiLevelCache.setStrategy(pageActionCacheConfig.cacheLevelStrategy);
38
- console.log('[PageActionCache] Set cache level strategy:', pageActionCacheConfig.cacheLevelStrategy);
39
- }
40
- if (pageActionCacheConfig.llmClassificationThreshold !== undefined) {
41
- multiLevelCache.setLLMThreshold(pageActionCacheConfig.llmClassificationThreshold);
42
- console.log('[PageActionCache] Set LLM classification threshold:', pageActionCacheConfig.llmClassificationThreshold);
43
- }
44
- if (pageActionCacheConfig.invalidationStrategy) {
45
- cacheInvalidation.setStrategy(pageActionCacheConfig.invalidationStrategy);
46
- console.log('[PageActionCache] Set invalidation strategy:', pageActionCacheConfig.invalidationStrategy);
47
- }
48
- if (pageActionCacheConfig.changeInvalidationThreshold !== undefined) {
49
- cacheInvalidation.setChangeThreshold(pageActionCacheConfig.changeInvalidationThreshold);
50
- console.log('[PageActionCache] Set change invalidation threshold:', pageActionCacheConfig.changeInvalidationThreshold);
51
- }
52
- // 注册缓存执行工具
53
- api.registerTool({
54
- name: 'browser_cache_execute',
55
- description: '执行缓存的页面操作序列,支持自动缓存匹配、场景识别和变量提取',
56
- async execute(ctx) {
57
- try {
58
- console.log('[PageActionCache] browser_cache_execute called');
59
- console.log('[PageActionCache] Context type:', typeof ctx);
60
- console.log('[PageActionCache] Context config:', ctx.config ? JSON.stringify(ctx.config, null, 2) : 'null');
61
- console.log('[PageActionCache] Context params:', ctx.params ? JSON.stringify(ctx.params, null, 2) : 'null');
62
- // 从插件配置中读取 enabled 状态
63
- const pluginConfig = ctx.config?.plugins?.entries?.['page-action-cache'] ?? {};
64
- const enabled = pluginConfig.enabled !== false;
65
- if (!enabled) {
66
- console.log('[PageActionCache] Extension disabled by context config');
67
- return {
68
- success: false,
69
- message: 'Extension is disabled',
70
- executedActions: 0,
71
- skippedActions: 0,
72
- failedActions: 0,
73
- savedTime: 0
74
- };
75
- }
76
- const params = ctx.params || {};
77
- const url = params.url;
78
- const viewport = params.viewport || '1920x1080';
79
- const scenario = params.scenario;
80
- const actions = params.actions;
81
- const useCache = params.useCache !== false; // 默认使用缓存
82
- const forceRefresh = params.forceRefresh === true;
83
- const llmClassificationScore = params.llmClassificationScore;
84
- console.log('[PageActionCache] Parsed params:', { url, viewport, scenario, useCache, forceRefresh, llmClassificationScore });
85
- if (!url) {
86
- return {
87
- success: false,
88
- message: 'Missing required parameter: url',
89
- executedActions: 0,
90
- skippedActions: 0,
91
- failedActions: 0,
92
- savedTime: 0
93
- };
94
- }
95
- // 识别场景
96
- let recognizedScenario = scenario || scenarioRecognizer.recognize(url);
97
- console.log('[PageActionCache] Recognized scenario:', recognizedScenario);
98
- let cachedEntry = null;
99
- let isCacheHit = false;
100
- let executedActions = 0;
101
- let skippedActions = 0;
102
- let failedActions = 0;
103
- let savedTime = 0;
104
- let cacheId = '';
105
- // 尝试从缓存中查找
106
- if (useCache && !forceRefresh) {
107
- console.log('[PageActionCache] Checking cache...');
108
- cachedEntry = multiLevelCache.queryCache(url, viewport);
109
- if (cachedEntry) {
110
- console.log('[PageActionCache] Cache hit found:', cachedEntry.id);
111
- isCacheHit = true;
112
- cacheId = cachedEntry.id;
113
- // 检查页面是否发生变化(如果提供了 HTML)
114
- if (pageActionCacheConfig.pageChangeDetectionEnabled && params.html) {
115
- const shouldInvalidate = cacheInvalidation.shouldInvalidate(url, viewport, params.html);
116
- if (shouldInvalidate) {
117
- console.log('[PageActionCache] Page changed, cache invalidated');
118
- multiLevelCache.deleteCache(url, viewport);
119
- cachedEntry = null;
120
- isCacheHit = false;
121
- }
122
- else {
123
- console.log('[PageActionCache] Page unchanged, cache valid');
124
- }
125
- }
126
- }
127
- else {
128
- console.log('[PageActionCache] Cache miss');
129
- }
130
- }
131
- // 如果没有缓存或需要强制刷新,执行新的操作
132
- if (!cachedEntry) {
133
- console.log('[PageActionCache] Executing new actions...');
134
- if (!actions || actions.length === 0) {
135
- return {
136
- success: false,
137
- message: 'No actions provided and no cache found',
138
- executedActions: 0,
139
- skippedActions: 0,
140
- failedActions: 0,
141
- savedTime: 0
142
- };
143
- }
144
- // 执行操作
145
- const actionResults = [];
146
- for (let i = 0; i < actions.length; i++) {
147
- const action = actions[i];
148
- console.log('[PageActionCache] Executing action', i + 1, ':', action.type);
149
- try {
150
- const startTime = Date.now();
151
- let result;
152
- switch (action.type) {
153
- case 'navigate':
154
- if (!action.params?.url) {
155
- result = { success: false, message: 'Missing URL' };
156
- }
157
- else {
158
- // 模拟导航操作
159
- console.log('[PageActionCache] Navigating to:', action.params.url);
160
- result = { success: true, message: `Navigated to ${action.params.url}` };
161
- }
162
- break;
163
- case 'click':
164
- if (!action.params?.selector) {
165
- result = { success: false, message: 'Missing selector' };
166
- }
167
- else {
168
- console.log('[PageActionCache] Clicking:', action.params.selector);
169
- result = { success: true, message: `Clicked ${action.params.selector}` };
170
- }
171
- break;
172
- case 'type':
173
- if (!action.params?.selector || action.params?.text === undefined) {
174
- result = { success: false, message: 'Missing selector or text' };
175
- }
176
- else {
177
- console.log('[PageActionCache] Typing:', action.params.text);
178
- result = { success: true, message: `Typed text` };
179
- }
180
- break;
181
- case 'screenshot':
182
- console.log('[PageActionCache] Taking screenshot');
183
- result = { success: true, message: 'Screenshot taken' };
184
- break;
185
- case 'script':
186
- if (!action.params?.script) {
187
- result = { success: false, message: 'Missing script' };
188
- }
189
- else {
190
- console.log('[PageActionCache] Executing script');
191
- result = { success: true, message: 'Script executed' };
192
- }
193
- break;
194
- default:
195
- result = { success: false, message: `Unknown action type: ${action.type}` };
196
- }
197
- const executionTime = Date.now() - startTime;
198
- result.executionTime = executionTime;
199
- actionResults.push(result);
200
- if (result.success) {
201
- executedActions++;
202
- }
203
- else {
204
- failedActions++;
205
- }
206
- }
207
- catch (error) {
208
- console.error('[PageActionCache] Action execution error:', error);
209
- failedActions++;
210
- actionResults.push({
211
- success: false,
212
- message: `Error: ${error instanceof Error ? error.message : String(error)}`
213
- });
214
- }
215
- }
216
- // 保存到缓存
217
- const processedActions = actions.map((action, index) => ({
218
- type: action.type,
219
- params: action.params,
220
- successCount: actionResults[index]?.success ? 1 : 0,
221
- failCount: actionResults[index]?.success ? 0 : 1
222
- }));
223
- cacheId = multiLevelCache.addCache(url, viewport, processedActions, recognizedScenario, llmClassificationScore);
224
- // 保存页面快照(如果提供了 HTML)
225
- if (params.html) {
226
- cacheInvalidation.saveSnapshot(url, viewport, params.html);
227
- }
228
- console.log('[PageActionCache] Saved to cache with ID:', cacheId);
229
- savedTime = 0; // 首次执行不节省时间
230
- }
231
- else {
232
- // 使用缓存执行
233
- console.log('[PageActionCache] Using cached entry...');
234
- const result = await browserActionExecutor.executeCacheEntry(cachedEntry);
235
- executedActions = result.executedActions;
236
- skippedActions = result.skippedActions;
237
- failedActions = result.failedActions;
238
- savedTime = result.savedTime;
239
- console.log('[PageActionCache] Cache execution result:', result);
240
- }
241
- // 生成返回消息
242
- let message = isCacheHit ? 'Cached Execution' : 'New Execution';
243
- message += '\n\n';
244
- message += `Execution completed ${isCacheHit ? 'from cache' : 'successfully'}\n\n`;
245
- message += `- Executed Actions: ${executedActions}\n`;
246
- message += `- Skipped Actions: ${skippedActions}\n`;
247
- message += `- Failed Actions: ${failedActions}\n`;
248
- message += `- Saved Time: ${savedTime}ms\n\n`;
249
- message += `Cache ID: ${cacheId}\n`;
250
- message += `URL: ${url}\n`;
251
- message += `Scenario: ${recognizedScenario}\n`;
252
- if (isCacheHit && cachedEntry) {
253
- message += `Cache Level: ${cachedEntry.level}\n`;
254
- message += `Access Count: ${cachedEntry.accessCount}\n`;
255
- }
256
- console.log('[PageActionCache] Returning result:', message);
257
- return {
258
- success: failedActions === 0,
259
- message,
260
- executedActions,
261
- skippedActions,
262
- failedActions,
263
- savedTime,
264
- cacheId,
265
- url,
266
- scenario: recognizedScenario,
267
- isCacheHit,
268
- cacheLevel: cachedEntry?.level
269
- };
270
- }
271
- catch (error) {
272
- console.error('[PageActionCache] Error in browser_cache_execute:', error);
273
- const errorMessage = error instanceof Error ? error.message : String(error);
274
- return {
275
- success: false,
276
- message: `Error: ${errorMessage}`,
277
- executedActions: 0,
278
- skippedActions: 0,
279
- failedActions: 0,
280
- savedTime: 0
281
- };
282
- }
283
- }
284
- });
285
- // 注册缓存统计工具
286
- api.registerTool({
287
- name: 'browser_cache_stats',
288
- description: '查看页面操作缓存的统计信息',
289
- async execute(ctx) {
290
- try {
291
- console.log('[PageActionCache] browser_cache_stats called');
292
- const pluginConfig = ctx.config?.plugins?.entries?.['page-action-cache'] ?? {};
293
- const enabled = pluginConfig.enabled !== false;
294
- if (!enabled) {
295
- return {
296
- success: false,
297
- message: 'Extension is disabled'
298
- };
299
- }
300
- const stats = multiLevelCache.getStats();
301
- const invalidationStats = cacheInvalidation.getInvalidationStats();
302
- console.log('[PageActionCache] Stats:', stats);
303
- console.log('[PageActionCache] Invalidation stats:', invalidationStats);
304
- // 生成统计报告
305
- let message = '## Page Action Cache Statistics\n\n';
306
- message += '### Overall Performance\n';
307
- message += `- Total Cache Entries: ${stats.totalEntries}\n`;
308
- message += `- Total Cache Hits: ${stats.totalHits}\n`;
309
- message += `- Cache Hit Rate: ${stats.hitRate.toFixed(2)}%\n\n`;
310
- message += '### Multi-Level Cache Distribution\n';
311
- for (const [level, levelStats] of Object.entries(stats.levelStats)) {
312
- message += `#### ${level} Cache\n`;
313
- message += `- Size: ${levelStats.size}/${levelStats.maxCapacity} (${(levelStats.usageRate * 100).toFixed(1)}% full)\n`;
314
- message += `- Average Access Count: ${levelStats.avgAccessCount.toFixed(1)}\n\n`;
315
- }
316
- message += '### Cache Invalidation\n';
317
- message += `- Total Snapshots: ${invalidationStats.totalSnapshots}\n`;
318
- message += `- Active Snapshots: ${invalidationStats.activeSnapshots}\n`;
319
- message += `- Invalidation Rate: ${(invalidationStats.invalidationRate * 100).toFixed(2)}%\n`;
320
- return {
321
- success: true,
322
- message,
323
- stats,
324
- invalidationStats
325
- };
326
- }
327
- catch (error) {
328
- console.error('[PageActionCache] Error in browser_cache_stats:', error);
329
- return {
330
- success: false,
331
- message: `Error: ${error instanceof Error ? error.message : String(error)}`
332
- };
333
- }
334
- }
335
- });
336
- // 注册缓存清空工具
337
- api.registerTool({
338
- name: 'browser_cache_clear',
339
- description: '清空页面操作缓存',
340
- async execute(ctx) {
341
- try {
342
- console.log('[PageActionCache] browser_cache_clear called');
343
- console.log('[PageActionCache] Context params:', ctx.params ? JSON.stringify(ctx.params, null, 2) : 'null');
344
- const pluginConfig = ctx.config?.plugins?.entries?.['page-action-cache'] ?? {};
345
- const enabled = pluginConfig.enabled !== false;
346
- if (!enabled) {
347
- return {
348
- success: false,
349
- message: 'Extension is disabled'
350
- };
351
- }
352
- const params = ctx.params || {};
353
- const level = params.level || 'all'; // 'all', 'L3', 'L2', 'L1'
354
- const url = params.url;
355
- const viewport = params.viewport;
356
- console.log('[PageActionCache] Clear params:', { level, url, viewport });
357
- let cleared = 0;
358
- if (level === 'all') {
359
- if (url) {
360
- // 清空特定 URL 的所有缓存
361
- multiLevelCache.deleteCacheByUrl(url);
362
- cacheInvalidation.invalidateByUrl(url);
363
- cleared = 1;
364
- }
365
- else {
366
- // 清空所有缓存
367
- multiLevelCache.clearAll();
368
- cacheInvalidation.reset();
369
- cleared = 1;
370
- }
371
- }
372
- else if (level === 'L3' || level === 'L2' || level === 'L1') {
373
- if (url && viewport) {
374
- multiLevelCache.deleteCache(url, viewport);
375
- cacheInvalidation.invalidate(url, viewport);
376
- cleared = 1;
377
- }
378
- else {
379
- multiLevelCache.clearLevel(level);
380
- cleared = 1;
381
- }
382
- }
383
- console.log('[PageActionCache] Cleared cache entries');
384
- const levelText = level === 'all' ? 'all caches' : `${level} cache`;
385
- const urlText = url ? ` for ${url}` : '';
386
- const message = `Cleared ${levelText}${urlText}`;
387
- return {
388
- success: true,
389
- message,
390
- level,
391
- url,
392
- cleared
393
- };
394
- }
395
- catch (error) {
396
- console.error('[PageActionCache] Error in browser_cache_clear:', error);
397
- return {
398
- success: false,
399
- message: `Error: ${error instanceof Error ? error.message : String(error)}`
400
- };
401
- }
402
- }
403
- });
404
- console.log('[PageActionCache] All tools registered successfully');
405
- }
406
- // Export register as registerTools for backward compatibility with tests
407
- export const registerTools = register;
408
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- /**
2
- * Multi-Level Cache - Page Action Cache
3
- * 多级缓存管理器 - L3/L2/L1 缓存层次
4
- */
5
- import type { CacheEntry, ScenarioType, CacheActionType } from './types.js';
6
- /**
7
- * 缓存级别
8
- */
9
- export type CacheLevel = 'L3' | 'L2' | 'L1';
10
- /**
11
- * 缓存条目扩展
12
- */
13
- interface ExtendedCacheEntry extends CacheEntry {
14
- level: CacheLevel;
15
- createdAt: number;
16
- lastAccessed: number;
17
- accessCount: number;
18
- expiresAt: number;
19
- llmClassificationScore?: number;
20
- }
21
- /**
22
- * 缓存策略
23
- */
24
- type CacheStrategy = 'auto' | 'l3-only' | 'l2-only' | 'l1-only';
25
- /**
26
- * 多级缓存管理器
27
- */
28
- export declare class MultiLevelCache {
29
- private levels;
30
- private levelConfigs;
31
- private strategy;
32
- private llmThreshold;
33
- constructor();
34
- /**
35
- * 初始化缓存级别
36
- */
37
- private initializeLevels;
38
- /**
39
- * 设置缓存策略
40
- */
41
- setStrategy(strategy: CacheStrategy): void;
42
- /**
43
- * 设置 LLM 分类阈值
44
- */
45
- setLLMThreshold(threshold: number): void;
46
- /**
47
- * 添加缓存条目
48
- */
49
- addCache(url: string, viewport: string, actions: Array<{
50
- type: CacheActionType;
51
- params?: any;
52
- successCount: number;
53
- failCount: number;
54
- }>, scenario?: ScenarioType, llmScore?: number): string;
55
- /**
56
- * 确定缓存级别
57
- */
58
- private determineCacheLevel;
59
- /**
60
- * 查询缓存
61
- */
62
- queryCache(url: string, viewport: string): ExtendedCacheEntry | null;
63
- /**
64
- * 判断是否应该提升缓存级别
65
- */
66
- private shouldPromote;
67
- /**
68
- * 提升缓存条目到更高级别
69
- */
70
- private promoteEntry;
71
- /**
72
- * 确保缓存容量
73
- */
74
- private ensureCapacity;
75
- /**
76
- * 驱逐缓存条目(LRU 策略)
77
- */
78
- private evictEntry;
79
- /**
80
- * 删除缓存条目
81
- */
82
- deleteCache(url: string, viewport: string): boolean;
83
- /**
84
- * 删除 URL 相关的所有缓存
85
- */
86
- deleteCacheByUrl(url: string): void;
87
- /**
88
- * 清空指定级别的缓存
89
- */
90
- clearLevel(level: CacheLevel): void;
91
- /**
92
- * 清空所有缓存
93
- */
94
- clearAll(): void;
95
- /**
96
- * 获取缓存统计
97
- */
98
- getStats(): {
99
- totalEntries: number;
100
- totalHits: number;
101
- hitRate: number;
102
- levelStats: Record<CacheLevel, {
103
- size: number;
104
- maxCapacity: number;
105
- usageRate: number;
106
- avgAccessCount: number;
107
- }>;
108
- };
109
- /**
110
- * 获取查询计数(用于统计)
111
- */
112
- private getQueryCount;
113
- /**
114
- * 生成缓存键
115
- */
116
- private getCacheKey;
117
- /**
118
- * 清理过期条目
119
- */
120
- cleanupExpired(): number;
121
- }
122
- /**
123
- * 单例导出
124
- */
125
- export declare const multiLevelCache: MultiLevelCache;
126
- export {};
127
- //# sourceMappingURL=multi-level-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-level-cache.d.ts","sourceRoot":"","sources":["../src/multi-level-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAa5C;;GAEG;AACH,UAAU,kBAAmB,SAAQ,UAAU;IAC7C,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,KAAK,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAe;;IAMnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,eAAe,CAAC;QACtB,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,EACF,QAAQ,CAAC,EAAE,YAAY,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM;IAiCT;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAuCpE;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAcnD;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAoBnC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASnC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAQhB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YAC7B,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;YAClB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;KACJ;IAsCD;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,cAAc,IAAI,MAAM;CAyBzB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,iBAAwB,CAAC"}