page-action-cache 2026.3.7 → 2026.4.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.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +218 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KACpE,GAAG,IAAI,CAAC;CACV;
|
|
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,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KACpE,GAAG,IAAI,CAAC;CACV;AAyDD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA0O7D"}
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,51 @@
|
|
|
2
2
|
* Page Action Cache - OpenClaw Extension
|
|
3
3
|
* 页面操作缓存扩展
|
|
4
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(profile, targetId, url) {
|
|
13
|
+
const parts = [];
|
|
14
|
+
if (profile)
|
|
15
|
+
parts.push(profile);
|
|
16
|
+
if (targetId)
|
|
17
|
+
parts.push(targetId);
|
|
18
|
+
if (url)
|
|
19
|
+
parts.push(url);
|
|
20
|
+
return parts.join(':');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 清理过期缓存
|
|
24
|
+
*/
|
|
25
|
+
function cleanupExpiredCache() {
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
let cleaned = 0;
|
|
28
|
+
for (const [key, entry] of memoryCache.entries()) {
|
|
29
|
+
if (now - entry.timestamp > CACHE_TTL_MS) {
|
|
30
|
+
memoryCache.delete(key);
|
|
31
|
+
cleaned++;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// LRU 清理
|
|
35
|
+
while (memoryCache.size > MAX_CACHE_SIZE) {
|
|
36
|
+
const oldestKey = memoryCache.keys().next().value;
|
|
37
|
+
if (oldestKey) {
|
|
38
|
+
memoryCache.delete(oldestKey);
|
|
39
|
+
cleaned++;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return cleaned;
|
|
43
|
+
}
|
|
5
44
|
/**
|
|
6
45
|
* 主扩展入口
|
|
7
46
|
*/
|
|
8
47
|
export default function register(api) {
|
|
9
48
|
console.log('[PageActionCache] Starting...');
|
|
10
|
-
// 注册缓存统计工具
|
|
49
|
+
// 注册缓存统计工具
|
|
11
50
|
api.registerTool({
|
|
12
51
|
name: 'page_cache_stats',
|
|
13
52
|
label: 'Page Cache Stats',
|
|
@@ -18,8 +57,185 @@ export default function register(api) {
|
|
|
18
57
|
required: []
|
|
19
58
|
},
|
|
20
59
|
execute: async (_toolCallId, _params) => {
|
|
60
|
+
cleanupExpiredCache();
|
|
61
|
+
const entries = Array.from(memoryCache.values());
|
|
62
|
+
const profiles = new Set(entries.filter(e => e.profile).map(e => e.profile));
|
|
63
|
+
const urls = new Set(entries.map(e => e.url));
|
|
64
|
+
const stats = {
|
|
65
|
+
totalEntries: memoryCache.size,
|
|
66
|
+
uniqueProfiles: profiles.size,
|
|
67
|
+
uniqueUrls: urls.size,
|
|
68
|
+
hits: entries.reduce((sum, e) => sum + e.hitCount, 0),
|
|
69
|
+
avgHitCount: memoryCache.size > 0
|
|
70
|
+
? entries.reduce((sum, e) => sum + e.hitCount, 0) / memoryCache.size
|
|
71
|
+
: 0,
|
|
72
|
+
oldestEntry: memoryCache.size > 0
|
|
73
|
+
? Math.min(...entries.map(e => e.timestamp))
|
|
74
|
+
: null,
|
|
75
|
+
newestEntry: memoryCache.size > 0
|
|
76
|
+
? Math.max(...entries.map(e => e.timestamp))
|
|
77
|
+
: null
|
|
78
|
+
};
|
|
79
|
+
console.log('[PageActionCache] Stats:', JSON.stringify(stats));
|
|
80
|
+
let report = `## Page Snapshot Cache Statistics\n\n`;
|
|
81
|
+
report += `- Total Entries: ${stats.totalEntries}\n`;
|
|
82
|
+
report += `- Unique Profiles: ${stats.uniqueProfiles}\n`;
|
|
83
|
+
report += `- Unique URLs: ${stats.uniqueUrls}\n`;
|
|
84
|
+
report += `- Total Hits: ${stats.hits}\n`;
|
|
85
|
+
report += `- Avg Hits per Entry: ${stats.avgHitCount.toFixed(2)}\n`;
|
|
86
|
+
report += `- Hit Rate: ${(stats.totalEntries > 0 ? (stats.hits / stats.totalEntries * 100).toFixed(2) : '0.00')}%\n`;
|
|
87
|
+
if (profiles.size > 0) {
|
|
88
|
+
report += `\n**Profiles:** ${Array.from(profiles).join(', ')}\n`;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
text: report,
|
|
92
|
+
stats
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// 注册缓存清空工具
|
|
97
|
+
api.registerTool({
|
|
98
|
+
name: 'page_cache_clear',
|
|
99
|
+
label: 'Clear Page Cache',
|
|
100
|
+
description: 'Clear page snapshot cache',
|
|
101
|
+
parameters: {
|
|
102
|
+
type: 'object',
|
|
103
|
+
properties: {},
|
|
104
|
+
required: []
|
|
105
|
+
},
|
|
106
|
+
execute: async (_toolCallId, _params) => {
|
|
107
|
+
const count = memoryCache.size;
|
|
108
|
+
memoryCache.clear();
|
|
109
|
+
console.log('[PageActionCache] Cleared', count);
|
|
110
|
+
return {
|
|
111
|
+
text: `Cleared ${count} cache entries`,
|
|
112
|
+
cleared: count
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// 注册手动设置缓存工具
|
|
117
|
+
api.registerTool({
|
|
118
|
+
name: 'page_cache_set',
|
|
119
|
+
label: 'Set Page Cache Entry',
|
|
120
|
+
description: 'Manually add an entry to the page cache',
|
|
121
|
+
parameters: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
properties: {
|
|
124
|
+
url: {
|
|
125
|
+
type: 'string',
|
|
126
|
+
description: 'Page URL'
|
|
127
|
+
},
|
|
128
|
+
targetId: {
|
|
129
|
+
type: 'string',
|
|
130
|
+
description: 'Browser tab target ID'
|
|
131
|
+
},
|
|
132
|
+
profile: {
|
|
133
|
+
type: 'string',
|
|
134
|
+
description: 'Browser profile name'
|
|
135
|
+
},
|
|
136
|
+
refs: {
|
|
137
|
+
type: 'string',
|
|
138
|
+
description: 'Refs type (role or aria)'
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
required: ['url', 'targetId']
|
|
142
|
+
},
|
|
143
|
+
execute: async (_toolCallId, params) => {
|
|
144
|
+
const typedParams = params;
|
|
145
|
+
const cacheKey = getCacheKey(typedParams.profile, typedParams.targetId, typedParams.url);
|
|
146
|
+
const existingEntry = memoryCache.get(cacheKey);
|
|
147
|
+
const entry = {
|
|
148
|
+
url: typedParams.url,
|
|
149
|
+
targetId: typedParams.targetId,
|
|
150
|
+
profile: typedParams.profile,
|
|
151
|
+
refs: typedParams.refs,
|
|
152
|
+
timestamp: Date.now(),
|
|
153
|
+
hitCount: existingEntry?.hitCount || 0
|
|
154
|
+
};
|
|
155
|
+
// Refresh insertion order for LRU
|
|
156
|
+
if (existingEntry) {
|
|
157
|
+
memoryCache.delete(cacheKey);
|
|
158
|
+
}
|
|
159
|
+
memoryCache.set(cacheKey, entry);
|
|
160
|
+
// Cleanup if over limit
|
|
161
|
+
if (memoryCache.size > MAX_CACHE_SIZE) {
|
|
162
|
+
const oldestKey = memoryCache.keys().next().value;
|
|
163
|
+
if (oldestKey) {
|
|
164
|
+
memoryCache.delete(oldestKey);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
console.log('[PageActionCache] Set cache:', cacheKey, 'refs:', typedParams.refs);
|
|
168
|
+
return {
|
|
169
|
+
text: `Added cache entry for ${typedParams.url}`,
|
|
170
|
+
cacheKey,
|
|
171
|
+
entry
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
// 注册获取缓存工具
|
|
176
|
+
api.registerTool({
|
|
177
|
+
name: 'page_cache_get',
|
|
178
|
+
label: 'Get Page Cache Entry',
|
|
179
|
+
description: 'Get a specific cache entry by URL or targetId',
|
|
180
|
+
parameters: {
|
|
181
|
+
type: 'object',
|
|
182
|
+
properties: {
|
|
183
|
+
url: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'Page URL (optional if targetId is provided)'
|
|
186
|
+
},
|
|
187
|
+
targetId: {
|
|
188
|
+
type: 'string',
|
|
189
|
+
description: 'Browser tab target ID (optional if URL is provided)'
|
|
190
|
+
},
|
|
191
|
+
profile: {
|
|
192
|
+
type: 'string',
|
|
193
|
+
description: 'Browser profile name (optional)'
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
required: []
|
|
197
|
+
},
|
|
198
|
+
execute: async (_toolCallId, params) => {
|
|
199
|
+
const typedParams = params;
|
|
200
|
+
if (!typedParams.url && !typedParams.targetId) {
|
|
201
|
+
return {
|
|
202
|
+
text: 'Error: Either url or targetId must be provided',
|
|
203
|
+
error: 'MISSING_PARAMETER'
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// Generate cache key to search
|
|
207
|
+
const cacheKey = getCacheKey(typedParams.profile, typedParams.targetId, typedParams.url);
|
|
208
|
+
const entry = memoryCache.get(cacheKey);
|
|
209
|
+
if (!entry) {
|
|
210
|
+
// Try to find by partial match
|
|
211
|
+
const matchingEntries = Array.from(memoryCache.values()).filter(e => (typedParams.url && e.url === typedParams.url) ||
|
|
212
|
+
(typedParams.targetId && e.targetId === typedParams.targetId));
|
|
213
|
+
if (matchingEntries.length === 0) {
|
|
214
|
+
return {
|
|
215
|
+
text: `No cache entry found for the provided parameters`,
|
|
216
|
+
found: false
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
text: `Found ${matchingEntries.length} matching cache entries`,
|
|
221
|
+
found: true,
|
|
222
|
+
entries: matchingEntries
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Increment hit count and refresh LRU
|
|
226
|
+
entry.hitCount++;
|
|
227
|
+
memoryCache.delete(cacheKey);
|
|
228
|
+
memoryCache.set(cacheKey, entry);
|
|
229
|
+
console.log('[PageActionCache] Cache hit:', cacheKey, 'hit count:', entry.hitCount);
|
|
21
230
|
return {
|
|
22
|
-
text:
|
|
231
|
+
text: `Cache entry found for ${entry.url}\n` +
|
|
232
|
+
`- Target ID: ${entry.targetId}\n` +
|
|
233
|
+
`- Profile: ${entry.profile || 'default'}\n` +
|
|
234
|
+
`- Refs: ${entry.refs || 'none'}\n` +
|
|
235
|
+
`- Hits: ${entry.hitCount}\n` +
|
|
236
|
+
`- Age: ${Math.floor((Date.now() - entry.timestamp) / 1000)}s`,
|
|
237
|
+
found: true,
|
|
238
|
+
entry
|
|
23
239
|
};
|
|
24
240
|
}
|
|
25
241
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|