page-action-cache 1.0.4 → 2.0.1

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 (89) hide show
  1. package/README.md +399 -0
  2. package/dist/browser-action-executor.d.ts +87 -0
  3. package/dist/browser-action-executor.d.ts.map +1 -0
  4. package/dist/browser-action-executor.js +283 -0
  5. package/dist/browser-action-executor.js.map +1 -0
  6. package/dist/cache-invalidation.d.ts +128 -0
  7. package/dist/cache-invalidation.d.ts.map +1 -0
  8. package/dist/cache-invalidation.js +262 -0
  9. package/dist/cache-invalidation.js.map +1 -0
  10. package/dist/cache-manager.d.ts +83 -0
  11. package/dist/cache-manager.d.ts.map +1 -0
  12. package/dist/cache-manager.js +184 -0
  13. package/dist/cache-manager.js.map +1 -0
  14. package/dist/index.d.ts +7 -21
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +249 -31
  17. package/dist/index.js.map +1 -1
  18. package/dist/multi-level-cache.d.ts +127 -0
  19. package/dist/multi-level-cache.d.ts.map +1 -0
  20. package/dist/multi-level-cache.js +362 -0
  21. package/dist/multi-level-cache.js.map +1 -0
  22. package/dist/scenario-recognizer.d.ts +17 -27
  23. package/dist/scenario-recognizer.d.ts.map +1 -1
  24. package/dist/scenario-recognizer.js +63 -183
  25. package/dist/scenario-recognizer.js.map +1 -1
  26. package/dist/types.d.ts +38 -312
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/types.js +2 -4
  29. package/dist/types.js.map +1 -1
  30. package/dist/variable-extractor.d.ts +56 -0
  31. package/dist/variable-extractor.d.ts.map +1 -0
  32. package/dist/variable-extractor.js +159 -0
  33. package/dist/variable-extractor.js.map +1 -0
  34. package/openclaw.plugin.json +12 -190
  35. package/package.json +29 -45
  36. package/src/browser-action-executor.ts +337 -0
  37. package/src/cache-invalidation.ts +338 -0
  38. package/src/cache-manager.ts +211 -0
  39. package/src/index.ts +306 -0
  40. package/src/multi-level-cache.ts +478 -0
  41. package/src/scenario-recognizer.ts +121 -0
  42. package/src/types-mock.d.ts +18 -0
  43. package/src/types.ts +66 -0
  44. package/src/variable-extractor.ts +204 -0
  45. package/dist/actions-executor.d.ts +0 -62
  46. package/dist/actions-executor.d.ts.map +0 -1
  47. package/dist/actions-executor.js +0 -339
  48. package/dist/actions-executor.js.map +0 -1
  49. package/dist/cache-invalidator.d.ts +0 -70
  50. package/dist/cache-invalidator.d.ts.map +0 -1
  51. package/dist/cache-invalidator.js +0 -212
  52. package/dist/cache-invalidator.js.map +0 -1
  53. package/dist/cache-store.d.ts +0 -80
  54. package/dist/cache-store.d.ts.map +0 -1
  55. package/dist/cache-store.js +0 -361
  56. package/dist/cache-store.js.map +0 -1
  57. package/dist/cache-strategy.d.ts +0 -65
  58. package/dist/cache-strategy.d.ts.map +0 -1
  59. package/dist/cache-strategy.js +0 -237
  60. package/dist/cache-strategy.js.map +0 -1
  61. package/dist/hooks-entry.d.ts +0 -29
  62. package/dist/hooks-entry.d.ts.map +0 -1
  63. package/dist/hooks-entry.js +0 -83
  64. package/dist/hooks-entry.js.map +0 -1
  65. package/dist/hooks.d.ts +0 -10
  66. package/dist/hooks.d.ts.map +0 -1
  67. package/dist/hooks.js +0 -277
  68. package/dist/hooks.js.map +0 -1
  69. package/dist/security-policy.d.ts +0 -62
  70. package/dist/security-policy.d.ts.map +0 -1
  71. package/dist/security-policy.js +0 -219
  72. package/dist/security-policy.js.map +0 -1
  73. package/dist/tools.d.ts +0 -209
  74. package/dist/tools.d.ts.map +0 -1
  75. package/dist/tools.js +0 -383
  76. package/dist/tools.js.map +0 -1
  77. package/dist/ux-enhancer.d.ts +0 -60
  78. package/dist/ux-enhancer.d.ts.map +0 -1
  79. package/dist/ux-enhancer.js +0 -218
  80. package/dist/ux-enhancer.js.map +0 -1
  81. package/dist/variable-resolver.d.ts +0 -28
  82. package/dist/variable-resolver.d.ts.map +0 -1
  83. package/dist/variable-resolver.js +0 -201
  84. package/dist/variable-resolver.js.map +0 -1
  85. package/docs/API.md +0 -555
  86. package/docs/IMPLEMENTATION.md +0 -1792
  87. package/docs/INTEGRATION.md +0 -387
  88. package/docs/README.md +0 -183
  89. package/skills/page-action-cache/SKILL.md +0 -216
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-invalidation.js","sourceRoot":"","sources":["../src/cache-invalidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Cache Manager - Page Action Cache Core
3
+ * 缓存管理器 - 页面操作缓存管理器
4
+ */
5
+ import type { CacheEntry, CacheStats, ScenarioType } from './types.js';
6
+ /**
7
+ * 缓存管理器
8
+ */
9
+ declare class CacheManager {
10
+ private cache;
11
+ private stats;
12
+ private autoSaveInterval;
13
+ private totalQueries;
14
+ private totalHits;
15
+ constructor();
16
+ /**
17
+ * 加载缓存
18
+ */
19
+ private loadCache;
20
+ /**
21
+ * 保存缓存
22
+ */
23
+ private saveCache;
24
+ /**
25
+ * 自动保存
26
+ */
27
+ private startAutoSave;
28
+ /**
29
+ * 查询缓存
30
+ */
31
+ query(url: string, viewport?: string): CacheEntry | null;
32
+ /**
33
+ * 更新缓存状态
34
+ */
35
+ updateCacheStatus(id: string, success: boolean): void;
36
+ /**
37
+ * 生成缓存键
38
+ */
39
+ private getCacheKey;
40
+ /**
41
+ * 添加缓存条目
42
+ */
43
+ addCache(params: {
44
+ url: string;
45
+ actions: Array<{
46
+ type: 'navigate' | 'click' | 'screenshot' | 'type' | 'script';
47
+ params?: any;
48
+ successCount?: number;
49
+ failCount?: number;
50
+ }>;
51
+ scenario?: ScenarioType;
52
+ viewport?: string | {
53
+ width?: number;
54
+ height?: number;
55
+ };
56
+ }): string;
57
+ /**
58
+ * 获取缓存
59
+ */
60
+ getCache(id: string): CacheEntry | null;
61
+ /**
62
+ * 清空缓存
63
+ */
64
+ clearCache(): void;
65
+ /**
66
+ * 获取统计
67
+ */
68
+ getStats(): CacheStats & {
69
+ totalQueries: number;
70
+ totalHits: number;
71
+ savedTimeFormatted: string;
72
+ };
73
+ /**
74
+ * 销毁
75
+ */
76
+ destroy(): void;
77
+ }
78
+ /**
79
+ * 单例导出
80
+ */
81
+ export declare const cacheManager: CacheManager;
82
+ export {};
83
+ //# sourceMappingURL=cache-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../src/cache-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,KAAK,CAMX;IACF,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAAa;;IAO9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAgBxD;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAWrD;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;YAAC,MAAM,CAAC,EAAE,GAAG,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3I,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,GAAG;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzD,GAAG,MAAM;IAyBV;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIvC;;OAEG;IACH,UAAU,IAAI,IAAI;IAclB;;OAEG;IACH,QAAQ,IAAI,UAAU,GAAG;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAeD;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Cache Manager - Page Action Cache Core
3
+ * 缓存管理器 - 页面操作缓存管理器
4
+ */
5
+ import { clearInterval, setInterval } from 'node:timers';
6
+ /**
7
+ * 缓存管理器
8
+ */
9
+ class CacheManager {
10
+ cache = new Map();
11
+ stats = {
12
+ totalEntries: 0,
13
+ totalActions: 0,
14
+ hitRate: 0,
15
+ savedActions: 0,
16
+ savedTime: 0
17
+ };
18
+ autoSaveInterval = null;
19
+ totalQueries = 0;
20
+ totalHits = 0;
21
+ constructor() {
22
+ this.loadCache();
23
+ this.startAutoSave();
24
+ }
25
+ /**
26
+ * 加载缓存
27
+ */
28
+ loadCache() {
29
+ try {
30
+ const cacheFile = process.env.PAGE_ACTION_CACHE_FILE || '/tmp/page-action-cache.json';
31
+ const fs = require('fs');
32
+ if (fs.existsSync(cacheFile)) {
33
+ const data = fs.readFileSync(cacheFile, 'utf8');
34
+ this.cache = new Map(JSON.parse(data));
35
+ }
36
+ console.log(`[CacheManager] Loaded ${this.cache.size} cache entries`);
37
+ }
38
+ catch (error) {
39
+ console.error(`[CacheManager] Failed to load cache: ${error.message}`);
40
+ }
41
+ }
42
+ /**
43
+ * 保存缓存
44
+ */
45
+ saveCache() {
46
+ try {
47
+ const cacheFile = process.env.PAGE_ACTION_CACHE_FILE || '/tmp/page-action-cache.json';
48
+ const fs = require('fs');
49
+ const data = Array.from(this.cache.entries());
50
+ fs.writeFileSync(cacheFile, JSON.stringify(data, null, 2));
51
+ console.log(`[CacheManager] Saved ${data.length} cache entries`);
52
+ }
53
+ catch (error) {
54
+ console.error(`[CacheManager] Failed to save cache: ${error.message}`);
55
+ }
56
+ }
57
+ /**
58
+ * 自动保存
59
+ */
60
+ startAutoSave() {
61
+ setInterval(() => this.saveCache(), 60000); // 每分钟保存一次
62
+ }
63
+ /**
64
+ * 查询缓存
65
+ */
66
+ query(url, viewport) {
67
+ const key = this.getCacheKey(url, viewport);
68
+ if (!key) {
69
+ return null;
70
+ }
71
+ this.totalQueries++;
72
+ const entry = this.cache.get(key);
73
+ if (entry) {
74
+ this.totalHits++;
75
+ return entry;
76
+ }
77
+ return null;
78
+ }
79
+ /**
80
+ * 更新缓存状态
81
+ */
82
+ updateCacheStatus(id, success) {
83
+ const entry = this.cache.get(id);
84
+ if (!entry) {
85
+ return;
86
+ }
87
+ // CacheEntry doesn't have successCount/failCount, so we skip this
88
+ // This is a compatibility method for older API
89
+ console.log(`[CacheManager] Cache status update requested for ${id}: ${success}`);
90
+ }
91
+ /**
92
+ * 生成缓存键
93
+ */
94
+ getCacheKey(url, viewport) {
95
+ let viewportStr = 'default';
96
+ if (viewport) {
97
+ if (typeof viewport === 'string') {
98
+ viewportStr = viewport;
99
+ }
100
+ else if (viewport.width && viewport.height) {
101
+ viewportStr = `${viewport.width}x${viewport.height}`;
102
+ }
103
+ }
104
+ return `${url}:${viewportStr}`;
105
+ }
106
+ /**
107
+ * 添加缓存条目
108
+ */
109
+ addCache(params) {
110
+ const key = this.getCacheKey(params.url, params.viewport);
111
+ const entry = {
112
+ id: Date.now().toString(),
113
+ url: params.url,
114
+ viewport: typeof params.viewport === 'string' ? params.viewport : (params.viewport ? `${params.viewport.width}x${params.viewport.height}` : '1920x1080'),
115
+ actions: params.actions.map(action => ({
116
+ ...action,
117
+ successCount: action.successCount || 0,
118
+ failCount: action.failCount || 0
119
+ })),
120
+ scenario: params.scenario || 'unknown',
121
+ timestamp: Date.now(),
122
+ hitRate: 0,
123
+ savedActions: 0,
124
+ savedTime: 0
125
+ };
126
+ this.cache.set(key, entry);
127
+ this.stats.totalEntries = this.cache.size;
128
+ this.stats.totalActions += params.actions.length;
129
+ return entry.id;
130
+ }
131
+ /**
132
+ * 获取缓存
133
+ */
134
+ getCache(id) {
135
+ return this.cache.get(id) || null;
136
+ }
137
+ /**
138
+ * 清空缓存
139
+ */
140
+ clearCache() {
141
+ this.cache.clear();
142
+ this.stats = {
143
+ totalEntries: 0,
144
+ totalActions: 0,
145
+ hitRate: 0,
146
+ savedActions: 0,
147
+ savedTime: 0
148
+ };
149
+ this.totalQueries = 0;
150
+ this.totalHits = 0;
151
+ console.log('[CacheManager] Cache cleared');
152
+ }
153
+ /**
154
+ * 获取统计
155
+ */
156
+ getStats() {
157
+ const hitRate = this.totalQueries > 0 ? (this.totalHits / this.totalQueries) * 100 : 0;
158
+ const savedTimePerMin = this.stats.savedTime > 0 ? this.stats.savedTime / 60000 : 0; // 转换为分钟
159
+ return {
160
+ ...this.stats,
161
+ hitRate: Math.round(hitRate * 100) / 100,
162
+ totalQueries: this.totalQueries,
163
+ totalHits: this.totalHits,
164
+ savedTimeFormatted: savedTimePerMin > 0
165
+ ? `${savedTimePerMin > 60 ? Math.floor(savedTimePerMin) : savedTimePerMin.toFixed(2)} 分钟`
166
+ : '0 分钟'
167
+ };
168
+ }
169
+ /**
170
+ * 销毁
171
+ */
172
+ destroy() {
173
+ this.cache.clear();
174
+ if (this.autoSaveInterval) {
175
+ clearInterval(this.autoSaveInterval);
176
+ this.autoSaveInterval = null;
177
+ }
178
+ }
179
+ }
180
+ /**
181
+ * 单例导出
182
+ */
183
+ export const cacheManager = new CacheManager();
184
+ //# sourceMappingURL=cache-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../src/cache-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,YAAY;IACR,KAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC3C,KAAK,GAAe;QAC1B,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;KACb,CAAC;IACM,gBAAgB,GAA0B,IAAI,CAAC;IAC/C,YAAY,GAAW,CAAC,CAAC;IACzB,SAAS,GAAW,CAAC,CAAC;IAE9B;QACE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,6BAA6B,CAAC;YACtF,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,6BAA6B,CAAC;YACtF,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAW,EAAE,QAAiB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,EAAU,EAAE,OAAgB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAW,EAAE,QAAuD;QACtF,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,WAAW,GAAG,QAAQ,CAAC;YACzB,CAAC;iBAAM,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC7C,WAAW,GAAG,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAKR;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAe;YACxB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YACxJ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrC,GAAG,MAAM;gBACT,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC;gBACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;aACjC,CAAC,CAAC;YACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;YACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;SACb,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAEjD,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG;YACX,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;SACb,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,QAAQ;QAKN,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAE7F,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG;YACxC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,kBAAkB,EAAE,eAAe,GAAG,CAAC;gBACnC,CAAC,CAAC,GAAG,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACzF,CAAC,CAAC,MAAM;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,24 +1,10 @@
1
1
  /**
2
- * Page Action Cache Extension - Main Exports
3
- * 页面操作缓存扩展 - 主要导出
2
+ * Page Action Cache - OpenClaw Extension
3
+ * 页面操作缓存扩展 - OpenClaw 扩展
4
4
  */
5
- export { getCacheStore } from "./cache-store.js";
6
- export { getScenarioRecognizer } from "./scenario-recognizer.js";
7
- export { getVariableResolver } from "./variable-resolver.js";
8
- export { getActionsExecutor } from "./actions-executor.js";
9
- export { getSecurityPolicy } from "./security-policy.js";
10
- export { getCacheInvalidator } from "./cache-invalidator.js";
11
- export { getUXEnhancer } from "./ux-enhancer.js";
12
- export type { AtomicAction, Action, AtomicActionType, NavigateAction, ClickAction, TypeAction, PressAction, HoverAction, ScreenshotAction, EvaluateAction, CompositeAction, PageViewport, VariableMap, CacheLevel, PageType, CacheSource, DOMHashFeatures, PageChangeDetection, PageActionCacheEntry, ScenarioRule, ScenarioMatch, CacheStats, CacheConfig, ExecutionResult, PwAi, } from "./types.js";
13
- export { registerPageActionCacheHooks } from "./hooks.js";
14
- export { initializePageActionCache, pageActionCachePlugin as pageActionCacheMeta } from "./hooks-entry.js";
15
- export { createExecuteCachedTool, executeCached, } from "./tools.js";
16
- export { createCacheListTool, cacheList, } from "./tools.js";
17
- export { createCacheStatsTool, cacheStats, } from "./tools.js";
18
- export { createCacheClearTool, cacheClear, } from "./tools.js";
19
- export { createScenarioListTool, scenarioList, } from "./tools.js";
20
- export { createForceRefreshTool, forceRefresh, } from "./tools.js";
21
- export { CACHE_TOOLS } from "./tools.js";
22
- export { AutoCacheStrategy, L3OnlyCacheStrategy, L2OnlyCacheStrategy, L1OnlyCacheStrategy, } from "./cache-strategy.js";
23
- export type { CacheStrategy } from "./cache-strategy.js";
5
+ import type { OpenClawPluginApi } from './types-mock.js';
6
+ /**
7
+ * 主扩展入口
8
+ */
9
+ export declare function register(api: OpenClawPluginApi): void;
24
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,YAAY,EACV,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,eAAe,EACf,IAAI,GACL,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,IAAI,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAM3G,OAAO,EACL,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA2BzD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqPrD"}
package/dist/index.js CHANGED
@@ -1,34 +1,252 @@
1
1
  /**
2
- * Page Action Cache Extension - Main Exports
3
- * 页面操作缓存扩展 - 主要导出
2
+ * Page Action Cache - OpenClaw Extension
3
+ * 页面操作缓存扩展 - OpenClaw 扩展
4
4
  */
5
- // ============================================================================
6
- // 核心模块导出
7
- // ============================================================================
8
- export { getCacheStore } from "./cache-store.js";
9
- export { getScenarioRecognizer } from "./scenario-recognizer.js";
10
- export { getVariableResolver } from "./variable-resolver.js";
11
- export { getActionsExecutor } from "./actions-executor.js";
12
- export { getSecurityPolicy } from "./security-policy.js";
13
- export { getCacheInvalidator } from "./cache-invalidator.js";
14
- export { getUXEnhancer } from "./ux-enhancer.js";
15
- // ============================================================================
16
- // Hooks 导出
17
- // ============================================================================
18
- export { registerPageActionCacheHooks } from "./hooks.js";
19
- export { initializePageActionCache, pageActionCachePlugin as pageActionCacheMeta } from "./hooks-entry.js";
20
- // ============================================================================
21
- // Tools 导出
22
- // ============================================================================
23
- export { createExecuteCachedTool, executeCached, } from "./tools.js";
24
- export { createCacheListTool, cacheList, } from "./tools.js";
25
- export { createCacheStatsTool, cacheStats, } from "./tools.js";
26
- export { createCacheClearTool, cacheClear, } from "./tools.js";
27
- export { createScenarioListTool, scenarioList, } from "./tools.js";
28
- export { createForceRefreshTool, forceRefresh, } from "./tools.js";
29
- export { CACHE_TOOLS } from "./tools.js";
30
- // ============================================================================
31
- // Cache Strategy 导出
32
- // ============================================================================
33
- export { AutoCacheStrategy, L3OnlyCacheStrategy, L2OnlyCacheStrategy, L1OnlyCacheStrategy, } from "./cache-strategy.js";
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 config = (api.getConfig?.() ?? {});
16
+ const enabled = config.enabled !== false;
17
+ if (!enabled) {
18
+ console.log('[PageActionCache] Extension disabled by configuration');
19
+ return;
20
+ }
21
+ // 配置扩展
22
+ if (config.scenarioRecognitionEnabled !== false) {
23
+ console.log('[PageActionCache] Scenario recognition enabled');
24
+ }
25
+ if (config.pageChangeDetectionEnabled !== false) {
26
+ cacheInvalidation.setStrategy(config.invalidationStrategy || 'soft');
27
+ cacheInvalidation.setChangeThreshold(config.changeInvalidationThreshold || 0.5);
28
+ console.log('[PageActionCache] Cache invalidation enabled');
29
+ }
30
+ if (config.cacheLevelStrategy) {
31
+ multiLevelCache.setStrategy(config.cacheLevelStrategy);
32
+ console.log(`[PageActionCache] Cache level strategy: ${config.cacheLevelStrategy}`);
33
+ }
34
+ if (config.llmClassificationThreshold) {
35
+ multiLevelCache.setLLMThreshold(config.llmClassificationThreshold);
36
+ }
37
+ // 注册缓存执行工具
38
+ api.registerTool({
39
+ name: 'browser_cache_execute',
40
+ description: '执行缓存的页面操作序列,支持自动缓存匹配、场景识别和变量提取',
41
+ async execute(ctx) {
42
+ try {
43
+ console.log('[PageActionCache] browser_cache_execute called');
44
+ const enabled = ctx.config?.plugins?.entries?.['page-action-cache']?.config?.enabled ?? true;
45
+ if (!enabled) {
46
+ return {
47
+ type: 'text',
48
+ content: 'Page Action Cache 功能已禁用'
49
+ };
50
+ }
51
+ const request = ctx.params;
52
+ const url = request?.url;
53
+ if (!url) {
54
+ return {
55
+ type: 'text',
56
+ content: 'Missing required parameter: url'
57
+ };
58
+ }
59
+ // 尝试从缓存中查找
60
+ const cachedEntry = multiLevelCache.queryCache(url, request.viewport || '1920x1080');
61
+ if (cachedEntry && !request.forceRefresh) {
62
+ console.log('[PageActionCache] Cache hit found');
63
+ return await executeFromCache(cachedEntry);
64
+ }
65
+ // 缓存未命中或强制刷新,创建新缓存并执行
66
+ console.log('[PageActionCache] Cache miss or forced refresh, creating new entry');
67
+ // 识别场景
68
+ let scenario = request.scenario;
69
+ if (!scenario) {
70
+ scenario = scenarioRecognizer.recognizeByUrl(url);
71
+ }
72
+ // 创建缓存条目
73
+ const actions = request.actions || [];
74
+ const cacheActions = actions.map((action) => ({
75
+ type: action.type,
76
+ params: action.params,
77
+ successCount: 0,
78
+ failCount: 0
79
+ }));
80
+ const cacheId = multiLevelCache.addCache(url, request.viewport || '1920x1080', cacheActions, scenario, request.llmClassificationScore);
81
+ // 执行操作
82
+ const entry = {
83
+ id: cacheId,
84
+ url,
85
+ viewport: request.viewport || '1920x1080',
86
+ actions: cacheActions,
87
+ scenario,
88
+ timestamp: Date.now(),
89
+ hitRate: 0,
90
+ savedActions: 0,
91
+ savedTime: 0,
92
+ level: 'L1',
93
+ createdAt: Date.now(),
94
+ lastAccessed: Date.now(),
95
+ accessCount: 0,
96
+ expiresAt: Date.now() + 86400000 // 24小时
97
+ };
98
+ const result = await browserActionExecutor.executeCacheEntry(entry);
99
+ return {
100
+ type: 'text',
101
+ content: `## Cache Execution Result
102
+
103
+ ${result.message}
104
+
105
+ - Executed Actions: ${result.executedActions}
106
+ - Skipped Actions: ${result.skippedActions}
107
+ - Failed Actions: ${result.failedActions}
108
+ - Saved Time: ${result.savedTime}ms
109
+
110
+ Cache ID: ${cacheId}
111
+ URL: ${url}
112
+ Scenario: ${scenario}
113
+ LLM Classification Score: ${request.llmClassificationScore || 'N/A'}`
114
+ };
115
+ }
116
+ catch (error) {
117
+ console.error('[PageActionCache] Error:', error);
118
+ return {
119
+ type: 'text',
120
+ content: `执行失败: ${error.message}`
121
+ };
122
+ }
123
+ }
124
+ });
125
+ // 注册缓存统计工具
126
+ api.registerTool({
127
+ name: 'browser_cache_stats',
128
+ description: '查看页面操作缓存的统计信息',
129
+ async execute(_ctx) {
130
+ try {
131
+ const stats = multiLevelCache.getStats();
132
+ const invalidationStats = cacheInvalidation.getInvalidationStats();
133
+ return {
134
+ type: 'text',
135
+ content: `## Page Action Cache Statistics
136
+
137
+ ### Overall Performance
138
+ - Total Cache Entries: ${stats.totalEntries}
139
+ - Total Cache Hits: ${stats.totalHits}
140
+ - Cache Hit Rate: ${stats.hitRate.toFixed(2)}%
141
+
142
+ ### Multi-Level Cache Distribution
143
+ ${Object.entries(stats.levelStats).map(([level, data]) => `
144
+ #### ${level} Cache
145
+ - Size: ${data.size}/${data.maxCapacity} (${(data.usageRate * 100).toFixed(1)}% full)
146
+ - Average Access Count: ${data.avgAccessCount.toFixed(1)}
147
+ `).join('')}
148
+
149
+ ### Cache Invalidation
150
+ - Total Snapshots: ${invalidationStats.totalSnapshots}
151
+ - Active Snapshots: ${invalidationStats.activeSnapshots}
152
+ - Invalidation Rate: ${(invalidationStats.invalidationRate * 100).toFixed(2)}%`
153
+ };
154
+ }
155
+ catch (error) {
156
+ return {
157
+ type: 'text',
158
+ content: `统计功能错误: ${error.message}`
159
+ };
160
+ }
161
+ }
162
+ });
163
+ // 注册缓存清除工具
164
+ api.registerTool({
165
+ name: 'browser_cache_clear',
166
+ description: '清空页面操作缓存',
167
+ async execute(ctx) {
168
+ try {
169
+ const request = ctx.params;
170
+ if (request.url && request.viewport) {
171
+ // 删除特定缓存条目
172
+ const deleted = multiLevelCache.deleteCache(request.url, request.viewport || '1920x1080');
173
+ cacheInvalidation.invalidate(request.url, request.viewport || '1920x1080');
174
+ return {
175
+ type: 'text',
176
+ content: deleted
177
+ ? `Cache entry deleted for ${request.url}:${request.viewport || '1920x1080'}`
178
+ : `No cache entry found for ${request.url}:${request.viewport || '1920x1080'}`
179
+ };
180
+ }
181
+ else if (request.url) {
182
+ // 删除 URL 相关的所有缓存
183
+ multiLevelCache.deleteCacheByUrl(request.url);
184
+ cacheInvalidation.invalidateByUrl(request.url);
185
+ return {
186
+ type: 'text',
187
+ content: `All cache entries for ${request.url} have been deleted`
188
+ };
189
+ }
190
+ else if (request.level) {
191
+ // 按级别删除
192
+ if (request.level === 'all') {
193
+ multiLevelCache.clearAll();
194
+ cacheInvalidation.reset();
195
+ }
196
+ else {
197
+ multiLevelCache.clearLevel(request.level);
198
+ }
199
+ return {
200
+ type: 'text',
201
+ content: `Cache cleared for level: ${request.level}`
202
+ };
203
+ }
204
+ else {
205
+ // 默认清空所有缓存
206
+ multiLevelCache.clearAll();
207
+ cacheInvalidation.reset();
208
+ return {
209
+ type: 'text',
210
+ content: 'All page action cache has been cleared'
211
+ };
212
+ }
213
+ }
214
+ catch (error) {
215
+ return {
216
+ type: 'text',
217
+ content: `清除功能错误: ${error.message}`
218
+ };
219
+ }
220
+ }
221
+ });
222
+ console.log('[PageActionCache] Tools registered successfully');
223
+ // 定期清理过期缓存
224
+ setInterval(() => {
225
+ multiLevelCache.cleanupExpired();
226
+ cacheInvalidation.cleanup();
227
+ }, 60 * 60 * 1000); // 每小时清理一次
228
+ }
229
+ /**
230
+ * 从缓存执行
231
+ */
232
+ async function executeFromCache(cachedEntry) {
233
+ const result = await browserActionExecutor.executeCacheEntry(cachedEntry);
234
+ return {
235
+ type: 'text',
236
+ content: `## Cached Execution
237
+
238
+ ${result.message}
239
+
240
+ - Executed Actions: ${result.executedActions}
241
+ - Skipped Actions: ${result.skippedActions}
242
+ - Failed Actions: ${result.failedActions}
243
+ - Saved Time: ${result.savedTime}ms
244
+
245
+ Cache ID: ${cachedEntry.id}
246
+ URL: ${cachedEntry.url}
247
+ Scenario: ${cachedEntry.scenario}
248
+ Cache Level: ${cachedEntry.level}
249
+ Access Count: ${cachedEntry.accessCount || 0}`
250
+ };
251
+ }
34
252
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkCjD,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,IAAI,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3G,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}