page-action-cache 2.0.9 → 2026.2.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 (43) hide show
  1. package/README.md +100 -306
  2. package/dist/index.d.ts +21 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +222 -372
  5. package/dist/index.js.map +1 -1
  6. package/dist/types.d.ts +6 -19
  7. package/dist/types.d.ts.map +1 -1
  8. package/dist/types.js +2 -2
  9. package/openclaw.plugin.json +23 -14
  10. package/package.json +24 -21
  11. package/dist/browser-action-executor.d.ts +0 -87
  12. package/dist/browser-action-executor.d.ts.map +0 -1
  13. package/dist/browser-action-executor.js +0 -283
  14. package/dist/browser-action-executor.js.map +0 -1
  15. package/dist/cache-invalidation.d.ts +0 -129
  16. package/dist/cache-invalidation.d.ts.map +0 -1
  17. package/dist/cache-invalidation.js +0 -266
  18. package/dist/cache-invalidation.js.map +0 -1
  19. package/dist/cache-manager.d.ts +0 -83
  20. package/dist/cache-manager.d.ts.map +0 -1
  21. package/dist/cache-manager.js +0 -184
  22. package/dist/cache-manager.js.map +0 -1
  23. package/dist/multi-level-cache.d.ts +0 -127
  24. package/dist/multi-level-cache.d.ts.map +0 -1
  25. package/dist/multi-level-cache.js +0 -364
  26. package/dist/multi-level-cache.js.map +0 -1
  27. package/dist/scenario-recognizer.d.ts +0 -35
  28. package/dist/scenario-recognizer.d.ts.map +0 -1
  29. package/dist/scenario-recognizer.js +0 -93
  30. package/dist/scenario-recognizer.js.map +0 -1
  31. package/dist/variable-extractor.d.ts +0 -56
  32. package/dist/variable-extractor.d.ts.map +0 -1
  33. package/dist/variable-extractor.js +0 -161
  34. package/dist/variable-extractor.js.map +0 -1
  35. package/src/browser-action-executor.ts +0 -337
  36. package/src/cache-invalidation.ts +0 -342
  37. package/src/cache-manager.ts +0 -211
  38. package/src/index.ts +0 -468
  39. package/src/multi-level-cache.ts +0 -480
  40. package/src/scenario-recognizer.ts +0 -121
  41. package/src/types-mock.d.ts +0 -18
  42. package/src/types.ts +0 -66
  43. package/src/variable-extractor.ts +0 -206
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../src/cache-manager.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"}
@@ -1,364 +0,0 @@
1
- /**
2
- * Multi-Level Cache - Page Action Cache
3
- * 多级缓存管理器 - L3/L2/L1 缓存层次
4
- */
5
- /**
6
- * 多级缓存管理器
7
- */
8
- export class MultiLevelCache {
9
- levels = new Map();
10
- levelConfigs = new Map();
11
- strategy = 'auto';
12
- llmThreshold = 0.8;
13
- constructor() {
14
- this.initializeLevels();
15
- }
16
- /**
17
- * 初始化缓存级别
18
- */
19
- initializeLevels() {
20
- // L3: 持久化缓存,最大容量,最长 TTL
21
- this.levelConfigs.set('L3', {
22
- level: 'L3',
23
- maxSize: 1000,
24
- ttl: 30 * 24 * 60 * 60 * 1000, // 30 天
25
- hitPriority: 1,
26
- description: '持久化缓存,适合稳定的重复操作'
27
- });
28
- // L2: 内存缓存,中等容量,中等 TTL
29
- this.levelConfigs.set('L2', {
30
- level: 'L2',
31
- maxSize: 200,
32
- ttl: 7 * 24 * 60 * 60 * 1000, // 7 天
33
- hitPriority: 2,
34
- description: '内存缓存,适合频繁访问的操作'
35
- });
36
- // L1: 热点缓存,小容量,短 TTL
37
- this.levelConfigs.set('L1', {
38
- level: 'L1',
39
- maxSize: 50,
40
- ttl: 1 * 24 * 60 * 60 * 1000, // 1 天
41
- hitPriority: 3,
42
- description: '热点缓存,适合当前会话的操作'
43
- });
44
- // 初始化各级缓存
45
- this.levels.set('L3', new Map());
46
- this.levels.set('L2', new Map());
47
- this.levels.set('L1', new Map());
48
- }
49
- /**
50
- * 设置缓存策略
51
- */
52
- setStrategy(strategy) {
53
- this.strategy = strategy;
54
- }
55
- /**
56
- * 设置 LLM 分类阈值
57
- */
58
- setLLMThreshold(threshold) {
59
- this.llmThreshold = Math.max(0, Math.min(1, threshold));
60
- }
61
- /**
62
- * 添加缓存条目
63
- */
64
- addCache(url, viewport, actions, scenario, llmScore) {
65
- const key = this.getCacheKey(url, viewport);
66
- const level = this.determineCacheLevel(scenario, llmScore);
67
- console.log(`[MultiLevelCache] Determined level for scenario ${scenario}: ${level}`);
68
- const entry = {
69
- id: Date.now().toString(),
70
- url,
71
- viewport,
72
- actions,
73
- scenario: scenario || 'unknown',
74
- timestamp: Date.now(),
75
- hitRate: 0,
76
- savedActions: 0,
77
- savedTime: 0,
78
- level,
79
- createdAt: Date.now(),
80
- lastAccessed: Date.now(),
81
- accessCount: 0,
82
- expiresAt: Date.now() + this.levelConfigs.get(level).ttl,
83
- llmClassificationScore: llmScore
84
- };
85
- // 确保不超过容量限制
86
- this.ensureCapacity(level);
87
- const cache = this.levels.get(level);
88
- cache.set(key, entry);
89
- console.log(`[MultiLevelCache] Added entry to ${level}: ${key}`);
90
- return entry.id;
91
- }
92
- /**
93
- * 确定缓存级别
94
- */
95
- determineCacheLevel(scenario, llmScore) {
96
- // 如果指定了特定策略
97
- if (this.strategy === 'l3-only')
98
- return 'L3';
99
- if (this.strategy === 'l2-only')
100
- return 'L2';
101
- if (this.strategy === 'l1-only')
102
- return 'L1';
103
- // 自动策略:根据场景和 LLM 分类分数确定级别
104
- if (llmScore !== undefined) {
105
- if (llmScore >= this.llmThreshold) {
106
- return 'L3'; // 高置信度使用 L3
107
- }
108
- else if (llmScore >= 0.5) {
109
- return 'L2'; // 中等置信度使用 L2
110
- }
111
- }
112
- // 根据场景确定级别
113
- switch (scenario) {
114
- case 'login':
115
- case 'payment':
116
- return 'L3'; // 敏感操作使用 L3
117
- case 'search':
118
- case 'checkout':
119
- return 'L2'; // 重要操作使用 L2
120
- default:
121
- return 'L1'; // 一般操作使用 L1
122
- }
123
- }
124
- /**
125
- * 查询缓存
126
- */
127
- queryCache(url, viewport) {
128
- const key = this.getCacheKey(url, viewport);
129
- // 按优先级从高到低查询
130
- const levelsToCheck = ['L1', 'L2', 'L3'];
131
- for (const level of levelsToCheck) {
132
- // 检查是否允许查询此级别
133
- if (this.strategy !== 'auto' && this.strategy !== `${level}-only`) {
134
- continue;
135
- }
136
- const cache = this.levels.get(level);
137
- if (!cache)
138
- continue;
139
- const entry = cache.get(key);
140
- if (entry) {
141
- // 检查是否过期
142
- if (Date.now() > entry.expiresAt) {
143
- cache.delete(key);
144
- continue;
145
- }
146
- // 更新访问统计
147
- entry.lastAccessed = Date.now();
148
- entry.accessCount++;
149
- // 如果不是当前最高级别,考虑提升
150
- if (this.shouldPromote(entry, level)) {
151
- this.promoteEntry(entry, level);
152
- }
153
- return entry;
154
- }
155
- }
156
- return null;
157
- }
158
- /**
159
- * 判断是否应该提升缓存级别
160
- */
161
- shouldPromote(entry, currentLevel) {
162
- if (currentLevel === 'L3')
163
- return false;
164
- // 访问次数超过阈值则提升
165
- const accessThreshold = currentLevel === 'L1' ? 5 : 10;
166
- if (entry.accessCount >= accessThreshold) {
167
- return true;
168
- }
169
- // 成功率高且场景重要则提升
170
- const totalAttempts = entry.actions.reduce((sum, a) => sum + a.successCount + a.failCount, 0);
171
- if (totalAttempts > 0) {
172
- const successRate = entry.actions.reduce((sum, a) => sum + a.successCount, 0) / totalAttempts;
173
- if (successRate > 0.9 && (entry.scenario === 'login' || entry.scenario === 'payment')) {
174
- return true;
175
- }
176
- }
177
- return false;
178
- }
179
- /**
180
- * 提升缓存条目到更高级别
181
- */
182
- promoteEntry(entry, fromLevel) {
183
- const targetLevel = fromLevel === 'L1' ? 'L2' : 'L3';
184
- const sourceCache = this.levels.get(fromLevel);
185
- const targetCache = this.levels.get(targetLevel);
186
- if (!sourceCache || !targetCache) {
187
- return;
188
- }
189
- const key = this.getCacheKey(entry.url, entry.viewport || '');
190
- sourceCache.delete(key);
191
- entry.level = targetLevel;
192
- entry.expiresAt = Date.now() + this.levelConfigs.get(targetLevel).ttl;
193
- this.ensureCapacity(targetLevel);
194
- targetCache.set(key, entry);
195
- console.log(`[MultiLevelCache] Promoted entry from ${fromLevel} to ${targetLevel}: ${key}`);
196
- }
197
- /**
198
- * 确保缓存容量
199
- */
200
- ensureCapacity(level) {
201
- const config = this.levelConfigs.get(level);
202
- if (!config)
203
- return;
204
- const cache = this.levels.get(level);
205
- if (!cache)
206
- return;
207
- while (cache.size >= config.maxSize) {
208
- this.evictEntry(level);
209
- }
210
- }
211
- /**
212
- * 驱逐缓存条目(LRU 策略)
213
- */
214
- evictEntry(level) {
215
- const cache = this.levels.get(level);
216
- if (!cache || cache.size === 0)
217
- return;
218
- let oldestKey = null;
219
- let oldestTime = Infinity;
220
- for (const [key, entry] of cache.entries()) {
221
- if (entry.lastAccessed < oldestTime) {
222
- oldestTime = entry.lastAccessed;
223
- oldestKey = key;
224
- }
225
- }
226
- if (oldestKey) {
227
- cache.delete(oldestKey);
228
- console.log(`[MultiLevelCache] Evicted entry from ${level}: ${oldestKey}`);
229
- }
230
- }
231
- /**
232
- * 删除缓存条目
233
- */
234
- deleteCache(url, viewport) {
235
- const key = this.getCacheKey(url, viewport);
236
- let deleted = false;
237
- for (const [level, cache] of this.levels.entries()) {
238
- if (cache.delete(key)) {
239
- deleted = true;
240
- console.log(`[MultiLevelCache] Deleted entry from ${level}: ${key}`);
241
- }
242
- }
243
- return deleted;
244
- }
245
- /**
246
- * 删除 URL 相关的所有缓存
247
- */
248
- deleteCacheByUrl(url) {
249
- const urlPrefix = `${url}:`;
250
- for (const [_level, cache] of this.levels.entries()) {
251
- const keysToDelete = [];
252
- for (const key of cache.keys()) {
253
- if (key.startsWith(urlPrefix)) {
254
- keysToDelete.push(key);
255
- }
256
- }
257
- for (const key of keysToDelete) {
258
- cache.delete(key);
259
- }
260
- }
261
- console.log(`[MultiLevelCache] Deleted cache entries for URL: ${url}`);
262
- }
263
- /**
264
- * 清空指定级别的缓存
265
- */
266
- clearLevel(level) {
267
- const cache = this.levels.get(level);
268
- if (cache) {
269
- const count = cache.size;
270
- cache.clear();
271
- console.log(`[MultiLevelCache] Cleared ${count} entries from ${level}`);
272
- }
273
- }
274
- /**
275
- * 清空所有缓存
276
- */
277
- clearAll() {
278
- for (const [level, cache] of this.levels.entries()) {
279
- const count = cache.size;
280
- cache.clear();
281
- console.log(`[MultiLevelCache] Cleared ${count} entries from ${level}`);
282
- }
283
- }
284
- /**
285
- * 获取缓存统计
286
- */
287
- getStats() {
288
- let totalEntries = 0;
289
- let totalHits = 0;
290
- const levelStats = {};
291
- for (const [level, cache] of this.levels.entries()) {
292
- const config = this.levelConfigs.get(level);
293
- totalEntries += cache.size;
294
- let levelHits = 0;
295
- let totalAccess = 0;
296
- for (const entry of cache.values()) {
297
- totalHits += entry.accessCount;
298
- levelHits += entry.accessCount;
299
- totalAccess += entry.accessCount;
300
- }
301
- levelStats[level] = {
302
- size: cache.size,
303
- maxCapacity: config.maxSize,
304
- usageRate: cache.size / config.maxSize,
305
- avgAccessCount: cache.size > 0 ? levelHits / cache.size : 0
306
- };
307
- }
308
- // 计算命中率
309
- const totalQueries = this.getQueryCount();
310
- const hitRate = totalQueries > 0 ? (totalHits / totalQueries) * 100 : 0;
311
- return {
312
- totalEntries,
313
- totalHits,
314
- hitRate: Math.round(hitRate * 100) / 100,
315
- levelStats
316
- };
317
- }
318
- /**
319
- * 获取查询计数(用于统计)
320
- */
321
- getQueryCount() {
322
- let count = 0;
323
- for (const cache of this.levels.values()) {
324
- for (const entry of cache.values()) {
325
- count += entry.accessCount;
326
- }
327
- }
328
- return count || 1; // 避免除以零
329
- }
330
- /**
331
- * 生成缓存键
332
- */
333
- getCacheKey(url, viewport) {
334
- return `${url}:${viewport}`;
335
- }
336
- /**
337
- * 清理过期条目
338
- */
339
- cleanupExpired() {
340
- let cleaned = 0;
341
- const now = Date.now();
342
- for (const [_level, cache] of this.levels.entries()) {
343
- const expiredKeys = [];
344
- for (const [key, entry] of cache.entries()) {
345
- if (now > entry.expiresAt) {
346
- expiredKeys.push(key);
347
- }
348
- }
349
- for (const key of expiredKeys) {
350
- cache.delete(key);
351
- cleaned++;
352
- }
353
- }
354
- if (cleaned > 0) {
355
- console.log(`[MultiLevelCache] Cleaned up ${cleaned} expired entries`);
356
- }
357
- return cleaned;
358
- }
359
- }
360
- /**
361
- * 单例导出
362
- */
363
- export const multiLevelCache = new MultiLevelCache();
364
- //# sourceMappingURL=multi-level-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-level-cache.js","sourceRoot":"","sources":["../src/multi-level-cache.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Scenario Recognizer - Page Action Cache
3
- * 场景识别器 - 识别用户操作场景
4
- */
5
- import type { ScenarioType } from './types.js';
6
- /**
7
- * 场景识别器
8
- */
9
- export declare class ScenarioRecognizer {
10
- /**
11
- * 通过 URL 识别场景
12
- */
13
- recognizeByUrl(url: string): ScenarioType;
14
- /**
15
- * 通过页面内容识别场景
16
- */
17
- recognizeByContent(content: string): ScenarioType;
18
- /**
19
- * 综合识别(URL + 内容)
20
- */
21
- recognize(url: string, content?: string): ScenarioType;
22
- /**
23
- * 添加自定义场景规则
24
- */
25
- addCustomRule(pattern: RegExp, scenario: ScenarioType): void;
26
- /**
27
- * 添加内容关键词
28
- */
29
- addContentKeyword(scenario: ScenarioType, keywords: string[]): void;
30
- }
31
- /**
32
- * 单例导出
33
- */
34
- export declare const scenarioRecognizer: ScenarioRecognizer;
35
- //# sourceMappingURL=scenario-recognizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario-recognizer.d.ts","sourceRoot":"","sources":["../src/scenario-recognizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0C/C;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IASzC;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAiBjD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IActD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5D;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;CAKpE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -1,93 +0,0 @@
1
- /**
2
- * Scenario Recognizer - Page Action Cache
3
- * 场景识别器 - 识别用户操作场景
4
- */
5
- /**
6
- * 场景识别规则
7
- */
8
- let SCENARIO_PATTERNS = [
9
- // 登录场景
10
- { pattern: /(login|signin|auth|oauth|sso|account|register|signup)/i, scenario: 'login' },
11
- // 搜索场景
12
- { pattern: /(search|query|find|explore|discover)/i, scenario: 'search' },
13
- // 支付场景
14
- { pattern: /(payment|pay|checkout|billing|invoice|transaction)/i, scenario: 'payment' },
15
- // 结账场景
16
- { pattern: /(cart|basket|order|purchase|buy)/i, scenario: 'checkout' },
17
- // 电商场景
18
- { pattern: /(shop|store|product|item|goods|marketplace)/i, scenario: 'checkout' }
19
- ];
20
- /**
21
- * 页面内容关键词
22
- */
23
- let CONTENT_KEYWORDS = {
24
- login: ['username', 'password', 'email', 'phone', '登录', '密码', '用户名', '邮箱', '手机号', 'sign in', 'log in'],
25
- search: ['search', 'query', '查找', '搜索', '输入', 'input'],
26
- payment: ['credit card', 'debit card', 'payment method', '银行卡', '信用卡', '支付方式', 'cvv', 'expiry'],
27
- checkout: ['cart', 'total', 'subtotal', 'shipping', '购物车', '总计', '运费', '收货地址'],
28
- general: [],
29
- unknown: []
30
- };
31
- /**
32
- * 场景识别器
33
- */
34
- export class ScenarioRecognizer {
35
- /**
36
- * 通过 URL 识别场景
37
- */
38
- recognizeByUrl(url) {
39
- for (const { pattern, scenario } of SCENARIO_PATTERNS) {
40
- if (pattern.test(url)) {
41
- return scenario;
42
- }
43
- }
44
- return 'general';
45
- }
46
- /**
47
- * 通过页面内容识别场景
48
- */
49
- recognizeByContent(content) {
50
- const lowerContent = content.toLowerCase();
51
- for (const [scenario, keywords] of Object.entries(CONTENT_KEYWORDS)) {
52
- if (keywords.length > 0) {
53
- const matchedKeywords = keywords.filter(keyword => lowerContent.includes(keyword.toLowerCase()));
54
- if (matchedKeywords.length >= 2) {
55
- return scenario;
56
- }
57
- }
58
- }
59
- return 'general';
60
- }
61
- /**
62
- * 综合识别(URL + 内容)
63
- */
64
- recognize(url, content) {
65
- const urlScenario = this.recognizeByUrl(url);
66
- if (urlScenario !== 'general' && urlScenario !== 'unknown') {
67
- return urlScenario;
68
- }
69
- if (content) {
70
- return this.recognizeByContent(content);
71
- }
72
- return urlScenario;
73
- }
74
- /**
75
- * 添加自定义场景规则
76
- */
77
- addCustomRule(pattern, scenario) {
78
- SCENARIO_PATTERNS.unshift({ pattern, scenario });
79
- }
80
- /**
81
- * 添加内容关键词
82
- */
83
- addContentKeyword(scenario, keywords) {
84
- if (CONTENT_KEYWORDS[scenario]) {
85
- CONTENT_KEYWORDS[scenario].push(...keywords);
86
- }
87
- }
88
- }
89
- /**
90
- * 单例导出
91
- */
92
- export const scenarioRecognizer = new ScenarioRecognizer();
93
- //# sourceMappingURL=scenario-recognizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario-recognizer.js","sourceRoot":"","sources":["../src/scenario-recognizer.ts"],"names":[],"mappings":"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"}