page-action-cache 2026.2.0 → 2026.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +2 -5
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Action Cache - OpenClaw Extension
|
|
3
|
+
* 页面操作缓存扩展
|
|
4
|
+
*/
|
|
5
|
+
interface OpenClawPluginApi {
|
|
6
|
+
registerTool(tool: {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: unknown;
|
|
10
|
+
execute: (params: unknown) => Promise<unknown>;
|
|
11
|
+
}): void;
|
|
12
|
+
getToolContext?: () => {
|
|
13
|
+
config?: Record<string, unknown>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 插件配置接口
|
|
18
|
+
*/
|
|
19
|
+
export interface PageActionCacheConfig {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
autoUseCache?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 主扩展入口
|
|
25
|
+
*/
|
|
26
|
+
export default function register(api: OpenClawPluginApi): void;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,GAAG,IAAI,CAAC;IACT,cAAc,CAAC,EAAE,MAAM;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAoDD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAiP7D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Action Cache - OpenClaw Extension
|
|
3
|
+
* 页面操作缓存扩展
|
|
4
|
+
*/
|
|
5
|
+
// 内存缓存(页面会话级别)
|
|
6
|
+
const memoryCache = new Map();
|
|
7
|
+
const MAX_CACHE_SIZE = 50;
|
|
8
|
+
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 分钟
|
|
9
|
+
/**
|
|
10
|
+
* 生成缓存键
|
|
11
|
+
*/
|
|
12
|
+
function getCacheKey(url, viewport) {
|
|
13
|
+
if (!url)
|
|
14
|
+
return '';
|
|
15
|
+
return viewport ? `${url}:${viewport}` : url;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 清理过期缓存
|
|
19
|
+
*/
|
|
20
|
+
function cleanupExpiredCache() {
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
let cleaned = 0;
|
|
23
|
+
for (const [key, entry] of memoryCache.entries()) {
|
|
24
|
+
if (now - entry.timestamp > CACHE_TTL_MS) {
|
|
25
|
+
memoryCache.delete(key);
|
|
26
|
+
cleaned++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// LRU 清理
|
|
30
|
+
while (memoryCache.size > MAX_CACHE_SIZE) {
|
|
31
|
+
const oldestKey = memoryCache.keys().next().value;
|
|
32
|
+
if (oldestKey) {
|
|
33
|
+
memoryCache.delete(oldestKey);
|
|
34
|
+
cleaned++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return cleaned;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 主扩展入口
|
|
41
|
+
*/
|
|
42
|
+
export default function register(api) {
|
|
43
|
+
console.log('[PageActionCache] Initializing extension...');
|
|
44
|
+
try {
|
|
45
|
+
// ✅ 方法 1:通过 getToolContext 获取配置
|
|
46
|
+
let toolContext = undefined;
|
|
47
|
+
if (typeof api.getToolContext === 'function') {
|
|
48
|
+
toolContext = api.getToolContext();
|
|
49
|
+
console.log('[PageActionCache] Method 1: config via getToolContext:', toolContext ? 'available' : 'not available');
|
|
50
|
+
}
|
|
51
|
+
// ✅ 方法 2:直接从 api 对象读取(某些版本)
|
|
52
|
+
if (!toolContext || typeof toolContext.config === 'undefined') {
|
|
53
|
+
try {
|
|
54
|
+
if (typeof api.config === 'object' && api.config) {
|
|
55
|
+
toolContext = { config: api.config };
|
|
56
|
+
console.log('[PageActionCache] Method 2: config via api.config:', toolContext);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
console.log('[PageActionCache] Method 2 failed, api.config not available');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ✅ 方法 3:从 config 对象获取(通过其他方式)
|
|
64
|
+
if (!toolContext) {
|
|
65
|
+
try {
|
|
66
|
+
const configMethod = api.getConfig;
|
|
67
|
+
if (typeof configMethod === 'function') {
|
|
68
|
+
const rawConfig = configMethod();
|
|
69
|
+
console.log('[PageActionCache] Method 3: config via getConfig:', rawConfig);
|
|
70
|
+
if (rawConfig && typeof rawConfig === 'object') {
|
|
71
|
+
const pluginsConfig = rawConfig.plugins;
|
|
72
|
+
if (pluginsConfig && typeof pluginsConfig === 'object') {
|
|
73
|
+
const extensionConfig = pluginsConfig.entries?.['page-action-cache'];
|
|
74
|
+
if (extensionConfig && typeof extensionConfig === 'object') {
|
|
75
|
+
toolContext = { config: { 'page-action-cache': extensionConfig } };
|
|
76
|
+
console.log('[PageActionCache] Method 3 success: config loaded');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log('[PageActionCache] Method 3: page-action-cache entry not found');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log('[PageActionCache] Method 3: plugins entries not found');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log('[PageActionCache] Method 3: raw config is not an object');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
console.log('[PageActionCache] Method 3 failed:', e);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 使用默认配置
|
|
96
|
+
const pluginConfig = {
|
|
97
|
+
enabled: toolContext?.config?.['page-action-cache']?.enabled !== false,
|
|
98
|
+
autoUseCache: toolContext?.config?.['page-action-cache']?.autoUseCache !== false,
|
|
99
|
+
};
|
|
100
|
+
console.log('[PageActionCache] Final config:', JSON.stringify(pluginConfig));
|
|
101
|
+
if (!pluginConfig.enabled) {
|
|
102
|
+
console.log('[PageActionCache] Extension disabled by configuration');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log('[PageActionCache] Extension enabled, registering tools...');
|
|
106
|
+
// 注册页面快照缓存工具
|
|
107
|
+
api.registerTool({
|
|
108
|
+
name: 'page_snapshot_cache',
|
|
109
|
+
description: 'Cache and retrieve page snapshots to speed up repeated operations',
|
|
110
|
+
inputSchema: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {
|
|
113
|
+
url: {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Page URL'
|
|
116
|
+
},
|
|
117
|
+
snapshot: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
description: 'Page snapshot to store'
|
|
120
|
+
},
|
|
121
|
+
refs: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
description: 'Role references map'
|
|
124
|
+
},
|
|
125
|
+
invalidate: {
|
|
126
|
+
type: 'boolean',
|
|
127
|
+
description: 'Invalidate cache for this URL',
|
|
128
|
+
default: false
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
required: ['url']
|
|
132
|
+
},
|
|
133
|
+
async execute(params) {
|
|
134
|
+
console.log('[PageActionCache] page_snapshot_cache called:', JSON.stringify(params));
|
|
135
|
+
const { url, snapshot, refs, invalidate = false } = params;
|
|
136
|
+
// 处理失效请求
|
|
137
|
+
if (invalidate) {
|
|
138
|
+
const key = getCacheKey(url);
|
|
139
|
+
memoryCache.delete(key);
|
|
140
|
+
console.log(`[PageActionCache] Cache invalidated for: ${url}`);
|
|
141
|
+
return {
|
|
142
|
+
text: `Cache invalidated for ${url}`,
|
|
143
|
+
invalidated: true
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// 处理存储请求
|
|
147
|
+
if (snapshot && refs) {
|
|
148
|
+
const key = getCacheKey(url);
|
|
149
|
+
const entry = {
|
|
150
|
+
url,
|
|
151
|
+
snapshot,
|
|
152
|
+
refs,
|
|
153
|
+
timestamp: Date.now(),
|
|
154
|
+
hitCount: 0
|
|
155
|
+
};
|
|
156
|
+
memoryCache.set(key, entry);
|
|
157
|
+
// 清理过期缓存
|
|
158
|
+
cleanupExpiredCache();
|
|
159
|
+
console.log(`[PageActionCache] Cache stored for: ${url}`);
|
|
160
|
+
return {
|
|
161
|
+
text: `Snapshot cached for ${url}`,
|
|
162
|
+
cached: true
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// 处理查询请求
|
|
166
|
+
const key = getCacheKey(url);
|
|
167
|
+
const cached = memoryCache.get(key);
|
|
168
|
+
if (cached && pluginConfig.autoUseCache) {
|
|
169
|
+
// 更新访问统计
|
|
170
|
+
cached.hitCount++;
|
|
171
|
+
cached.timestamp = Date.now();
|
|
172
|
+
console.log(`[PageActionCache] Cache HIT for: ${url} (hit #${cached.hitCount})`);
|
|
173
|
+
return {
|
|
174
|
+
text: `Cache hit for ${url}`,
|
|
175
|
+
snapshot: cached.snapshot,
|
|
176
|
+
refs: cached.refs,
|
|
177
|
+
hitCount: cached.hitCount,
|
|
178
|
+
cached: true
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
console.log(`[PageActionCache] Cache MISS for: ${url}`);
|
|
182
|
+
return {
|
|
183
|
+
text: `Cache miss for ${url}`,
|
|
184
|
+
cached: false
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// 注册缓存统计工具
|
|
189
|
+
api.registerTool({
|
|
190
|
+
name: 'page_cache_stats',
|
|
191
|
+
description: 'View page snapshot cache statistics',
|
|
192
|
+
inputSchema: {
|
|
193
|
+
type: 'object',
|
|
194
|
+
properties: {},
|
|
195
|
+
required: []
|
|
196
|
+
},
|
|
197
|
+
async execute() {
|
|
198
|
+
console.log('[PageActionCache] page_cache_stats called');
|
|
199
|
+
// 清理过期缓存
|
|
200
|
+
const cleaned = cleanupExpiredCache();
|
|
201
|
+
const stats = {
|
|
202
|
+
totalEntries: memoryCache.size,
|
|
203
|
+
hits: Array.from(memoryCache.values()).reduce((sum, e) => sum + e.hitCount, 0),
|
|
204
|
+
avgHitCount: memoryCache.size > 0
|
|
205
|
+
? Array.from(memoryCache.values()).reduce((sum, e) => sum + e.hitCount, 0) / memoryCache.size
|
|
206
|
+
: 0,
|
|
207
|
+
oldestEntry: memoryCache.size > 0
|
|
208
|
+
? Math.min(...Array.from(memoryCache.values()).map(e => e.timestamp))
|
|
209
|
+
: null,
|
|
210
|
+
newestEntry: memoryCache.size > 0
|
|
211
|
+
? Math.max(...Array.from(memoryCache.values()).map(e => e.timestamp))
|
|
212
|
+
: null
|
|
213
|
+
};
|
|
214
|
+
console.log('[PageActionCache] Stats:', JSON.stringify(stats));
|
|
215
|
+
const hitRate = stats.totalEntries > 0
|
|
216
|
+
? (stats.hits / stats.totalEntries * 100).toFixed(2)
|
|
217
|
+
: '0.00';
|
|
218
|
+
return {
|
|
219
|
+
text: `## Page Snapshot Cache Statistics\n\n` +
|
|
220
|
+
`- Total Entries: ${stats.totalEntries}\n` +
|
|
221
|
+
`- Total Hits: ${stats.hits}\n` +
|
|
222
|
+
`- Hit Rate: ${hitRate}%\n` +
|
|
223
|
+
`- Avg Hit Count: ${stats.avgHitCount.toFixed(1)}\n` +
|
|
224
|
+
`- Cleaned Entries: ${cleaned}\n` +
|
|
225
|
+
`- Oldest Entry: ${stats.oldestEntry ? new Date(stats.oldestEntry).toISOString() : 'N/A'}\n` +
|
|
226
|
+
`- Newest Entry: ${stats.newestEntry ? new Date(stats.newestEntry).toISOString() : 'N/A'}`,
|
|
227
|
+
stats
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
// 注册缓存清空工具
|
|
232
|
+
api.registerTool({
|
|
233
|
+
name: 'page_cache_clear',
|
|
234
|
+
description: 'Clear page snapshot cache',
|
|
235
|
+
inputSchema: {
|
|
236
|
+
type: 'object',
|
|
237
|
+
properties: {},
|
|
238
|
+
required: []
|
|
239
|
+
},
|
|
240
|
+
async execute() {
|
|
241
|
+
console.log('[PageActionCache] page_cache_clear called');
|
|
242
|
+
const count = memoryCache.size;
|
|
243
|
+
memoryCache.clear();
|
|
244
|
+
console.log(`[PageActionCache] Cleared ${count} cache entries`);
|
|
245
|
+
return {
|
|
246
|
+
text: `Cleared ${count} cache entries`,
|
|
247
|
+
cleared: count
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
console.log('[PageActionCache] All tools registered successfully');
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.error('[PageActionCache] Fatal error during plugin registration:', error);
|
|
255
|
+
// 即使发生错误,也尝试注册基本工具以确保插件可用
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Action Cache - Type Definitions
|
|
3
|
+
* 页面操作缓存 - 类型定义
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 场景类型
|
|
7
|
+
*/
|
|
8
|
+
export type ScenarioType = 'login' | 'search' | 'payment' | 'checkout' | 'general';
|
|
9
|
+
/**
|
|
10
|
+
* 缓存操作类型
|
|
11
|
+
*/
|
|
12
|
+
export type CacheActionType = 'navigate' | 'click' | 'screenshot' | 'type' | 'script' | 'hover' | 'drag' | 'select' | 'fill' | 'resize' | 'wait' | 'evaluate' | 'close';
|
|
13
|
+
/**
|
|
14
|
+
* 缓存条目
|
|
15
|
+
*/
|
|
16
|
+
export interface CacheEntry {
|
|
17
|
+
id: string;
|
|
18
|
+
url: string;
|
|
19
|
+
viewport?: string;
|
|
20
|
+
actions: Array<{
|
|
21
|
+
type: CacheActionType;
|
|
22
|
+
params?: any;
|
|
23
|
+
successCount: number;
|
|
24
|
+
failCount: number;
|
|
25
|
+
}>;
|
|
26
|
+
scenario?: ScenarioType;
|
|
27
|
+
timestamp: number;
|
|
28
|
+
hitRate: number;
|
|
29
|
+
savedActions: number;
|
|
30
|
+
savedTime: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 缓存统计
|
|
34
|
+
*/
|
|
35
|
+
export interface CacheStats {
|
|
36
|
+
totalEntries: number;
|
|
37
|
+
totalActions: number;
|
|
38
|
+
hitRate: number;
|
|
39
|
+
savedActions: number;
|
|
40
|
+
savedTime: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 缓存配置
|
|
44
|
+
*/
|
|
45
|
+
export interface PageActionCacheConfig {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
autoUseCache?: boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,QAAQ,GACR,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,OAAO,GACP,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,CAAC;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "page-action-cache",
|
|
3
|
-
"version": "2026.2.
|
|
3
|
+
"version": "2026.2.2",
|
|
4
4
|
"description": "Page Action Cache - OpenClaw extension",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,11 +14,7 @@
|
|
|
14
14
|
"build": "tsc",
|
|
15
15
|
"test": "vitest"
|
|
16
16
|
},
|
|
17
|
-
"dependencies": {
|
|
18
|
-
"openclaw": "workspace:*"
|
|
19
|
-
},
|
|
20
17
|
"devDependencies": {
|
|
21
|
-
"openclaw": "workspace:*",
|
|
22
18
|
"@types/node": "^20.0.0",
|
|
23
19
|
"typescript": "^5.0.0",
|
|
24
20
|
"vitest": "^1.0.0"
|
|
@@ -31,6 +27,7 @@
|
|
|
31
27
|
"openclaw.plugin.json"
|
|
32
28
|
],
|
|
33
29
|
"openclaw": {
|
|
30
|
+
"extensions": ["./dist/index.js"],
|
|
34
31
|
"minVersion": "2026.2.0",
|
|
35
32
|
"kind": "extension",
|
|
36
33
|
"configSchema": {
|