page-action-cache 1.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 (73) hide show
  1. package/dist/actions-executor.d.ts +62 -0
  2. package/dist/actions-executor.d.ts.map +1 -0
  3. package/dist/actions-executor.js +339 -0
  4. package/dist/actions-executor.js.map +1 -0
  5. package/dist/cache-invalidator.d.ts +70 -0
  6. package/dist/cache-invalidator.d.ts.map +1 -0
  7. package/dist/cache-invalidator.js +212 -0
  8. package/dist/cache-invalidator.js.map +1 -0
  9. package/dist/cache-store.d.ts +80 -0
  10. package/dist/cache-store.d.ts.map +1 -0
  11. package/dist/cache-store.js +361 -0
  12. package/dist/cache-store.js.map +1 -0
  13. package/dist/cache-strategy.d.ts +65 -0
  14. package/dist/cache-strategy.d.ts.map +1 -0
  15. package/dist/cache-strategy.js +237 -0
  16. package/dist/cache-strategy.js.map +1 -0
  17. package/dist/hooks-entry.d.ts +18 -0
  18. package/dist/hooks-entry.d.ts.map +1 -0
  19. package/dist/hooks-entry.js +27 -0
  20. package/dist/hooks-entry.js.map +1 -0
  21. package/dist/hooks.d.ts +10 -0
  22. package/dist/hooks.d.ts.map +1 -0
  23. package/dist/hooks.js +277 -0
  24. package/dist/hooks.js.map +1 -0
  25. package/dist/index.d.ts +24 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +34 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/scenario-recognizer.d.ts +45 -0
  30. package/dist/scenario-recognizer.d.ts.map +1 -0
  31. package/dist/scenario-recognizer.js +213 -0
  32. package/dist/scenario-recognizer.js.map +1 -0
  33. package/dist/security-policy.d.ts +62 -0
  34. package/dist/security-policy.d.ts.map +1 -0
  35. package/dist/security-policy.js +219 -0
  36. package/dist/security-policy.js.map +1 -0
  37. package/dist/tools.d.ts +209 -0
  38. package/dist/tools.d.ts.map +1 -0
  39. package/dist/tools.js +383 -0
  40. package/dist/tools.js.map +1 -0
  41. package/dist/types.d.ts +336 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +8 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/ux-enhancer.d.ts +60 -0
  46. package/dist/ux-enhancer.d.ts.map +1 -0
  47. package/dist/ux-enhancer.js +218 -0
  48. package/dist/ux-enhancer.js.map +1 -0
  49. package/dist/variable-resolver.d.ts +28 -0
  50. package/dist/variable-resolver.d.ts.map +1 -0
  51. package/dist/variable-resolver.js +201 -0
  52. package/dist/variable-resolver.js.map +1 -0
  53. package/docs/API.md +555 -0
  54. package/docs/IMPLEMENTATION.md +1792 -0
  55. package/docs/INTEGRATION.md +387 -0
  56. package/docs/README.md +183 -0
  57. package/index.ts +118 -0
  58. package/openclaw.plugin.json +208 -0
  59. package/package.json +76 -0
  60. package/skills/page-action-cache/SKILL.md +216 -0
  61. package/src/actions-executor.ts +441 -0
  62. package/src/cache-invalidator.ts +271 -0
  63. package/src/cache-store.ts +457 -0
  64. package/src/cache-strategy.ts +327 -0
  65. package/src/hooks-entry.ts +114 -0
  66. package/src/hooks.ts +332 -0
  67. package/src/index.ts +104 -0
  68. package/src/scenario-recognizer.ts +259 -0
  69. package/src/security-policy.ts +268 -0
  70. package/src/tools.ts +437 -0
  71. package/src/types.ts +482 -0
  72. package/src/ux-enhancer.ts +266 -0
  73. package/src/variable-resolver.ts +258 -0
@@ -0,0 +1,387 @@
1
+ # Page Action Cache Extension - 集成到 OpenClaw
2
+
3
+ 本文档说明如何将 `@openclaw/page-action-cache` 扩展集成到 OpenClaw 项目。
4
+
5
+ ## 概述
6
+
7
+ **page-action-cache** 是一个 **Hooks 类型扩展**,不是 ChannelPlugin。它通过注册 Hooks 来拦截和增强浏览器操作,实现页面操作缓存以降低 token 消耗和操作延迟。
8
+
9
+ ## 扩展类型
10
+
11
+ - **类型**: Hooks 扩展
12
+ - **ID**: `page-action-cache`
13
+ - **用途**: 浏览器操作缓存
14
+ - **版本**: 1.0.0
15
+
16
+ ## 主要功能
17
+
18
+ 1. **场景识别**: 自动识别常见场景(登录、搜索、支付等)
19
+ 2. **缓存存储**: 基于 MD5 hash 和 TTL 的文件存储
20
+ 3. **变量系统**: 从用户输入提取变量(用户名、密码等)
21
+ 4. **安全策略**: 敏感字段加密、访问控制、日志脱敏
22
+ 5. **缓存失效**: DOM 变化检测、结构哈希比较
23
+ 6. **用户体验增强**: 缓存状态展示、用户确认、错误反馈
24
+
25
+ ## 集成步骤
26
+
27
+ ### 1. 在主项目 package.json 中添加依赖
28
+
29
+ 在 `/Users/zhoujinyu/Documents/projects/repo/package.json` 中添加:
30
+
31
+ ```json
32
+ {
33
+ "devDependencies": {
34
+ "@openclaw/page-action-cache": "workspace:*"
35
+ }
36
+ }
37
+ ```
38
+
39
+ ### 2. 通过配置文件管理(推荐)
40
+
41
+ 使用 OpenClaw 的插件配置系统,通过命令行设置配置:
42
+
43
+ ```bash
44
+ # 添加插件配置
45
+ openclaw config set plugins.entries.page-action-cache.enabled=true
46
+ openclaw config set plugins.entries.page-action-cache.config.enabled=true
47
+ openclaw config set plugins.entries.page-action-cache.config.autoUseCache=true
48
+ openclaw config set plugins.entries.page-action-cache.config.scenarioRecognitionEnabled=true
49
+ ```
50
+
51
+ **配置文件格式:**
52
+
53
+ ```json5
54
+ {
55
+ plugins: {
56
+ enabled: true,
57
+ allow: ["page-action-cache"],
58
+ entries: {
59
+ "page-action-cache": {
60
+ enabled: true,
61
+ config: {
62
+ enabled: true,
63
+ autoUseCache: true,
64
+ scenarioRecognitionEnabled: true,
65
+ },
66
+ },
67
+ },
68
+ },
69
+ }
70
+ ```
71
+
72
+ **配置文件位置:**
73
+
74
+ - **macOS**: `~/.openclaw/config.json`
75
+ - **Linux**: `~/.openclaw/config.json`
76
+
77
+ **加载配置后重启服务:**
78
+
79
+ ```bash
80
+ # macOS app: 重新打开应用
81
+ # - Linux: systemctl restart openclaw-gateway
82
+ # - 开发环境: 重启网关进程
83
+ ```
84
+
85
+ **注意:** 配置文件需要 OpenClaw 的插件系统支持。如果插件系统不支持此方式,可以使用方法 3(代码初始化)作为替代。
86
+
87
+ ---
88
+
89
+ ### 3. 代码初始化(直接调用)
90
+
91
+ 在 OpenClaw 启动时直接调用扩展初始化函数:
92
+
93
+ ```typescript
94
+ import { initializePageActionCache } from "@openclaw/page-action-cache/hooks-entry";
95
+
96
+ // 在网关或代理启动时
97
+ initializePageActionCache(gatewayApi, {
98
+ enabled: true,
99
+ autoUseCache: true,
100
+ scenarioRecognitionEnabled: true,
101
+ cacheLevelStrategy: "auto",
102
+ });
103
+ ```
104
+
105
+ ### 4. Hooks 自动注册
106
+
107
+ 扩展通过 `registerPageActionCacheHooks()` 函数自动注册以下 Hooks:
108
+
109
+ - **before_tool_call**: 场景识别和缓存拦截
110
+ - 检测 `browser` 工具调用
111
+ - 识别场景(登录、搜索、支付等)
112
+ - 返回缓存信息(如果缓存命中)
113
+
114
+ - **after_tool_call**: 保存 LLM 分析结果
115
+ - 提取 LLM 返回的场景类型
116
+ - 解析变量
117
+ - 保存到缓存(L3/L2/L1)
118
+
119
+ - **before_prompt_build**: 注入缓存使用指南
120
+ - 在命中率 > 30% 时注入
121
+ - 显示缓存统计
122
+ - 列出已缓存场景
123
+
124
+ ## API 导出
125
+
126
+ ### 核心 API
127
+
128
+ ```typescript
129
+ // 缓存存储
130
+ import { getCacheStore } from "@openclaw/page-action-cache";
131
+ const cacheStore = getCacheStore();
132
+
133
+ // 保存缓存
134
+ cacheStore.set(url, viewport, actions, {
135
+ scenario: "login",
136
+ cacheLevel: "L3",
137
+ variables: { username: "...", password: "..." },
138
+ });
139
+
140
+ // 获取缓存
141
+ const entry = cacheStore.get(url, viewport);
142
+
143
+ // 列出缓存
144
+ const entries = cacheStore.listEntries();
145
+
146
+ // 清空缓存
147
+ cacheStore.clear();
148
+ ```
149
+
150
+ ### 场景识别
151
+
152
+ ```typescript
153
+ import { getScenarioRecognizer } from "@openclaw/page-action-cache";
154
+ const recognizer = getScenarioRecognizer();
155
+
156
+ // 识别场景
157
+ const match = await recognizer.recognize(userInput, currentUrl);
158
+ if (match) {
159
+ console.log(`场景: ${match.scenario}, 置信度: ${match.confidence}`);
160
+ }
161
+ ```
162
+
163
+ ### 变量解析
164
+
165
+ ```typescript
166
+ import { getVariableResolver } from "@openclaw/page-action-cache";
167
+ const resolver = getVariableResolver();
168
+
169
+ // 解析变量
170
+ const variables = resolver.resolveVariables(userInput, scenario);
171
+ ```
172
+
173
+ ### 操作执行
174
+
175
+ ```typescript
176
+ import { getActionsExecutor } from "@openclaw/page-action-cache";
177
+ const executor = getActionsExecutor();
178
+ executor.setCdpUrl(cdpUrl);
179
+
180
+ // 执行操作
181
+ const results = await executor.executeBatch(actions, variables);
182
+ ```
183
+
184
+ ### 安全策略
185
+
186
+ ```typescript
187
+ import { getSecurityPolicy } from "@openclaw/page-action-cache";
188
+ const policy = getSecurityPolicy();
189
+
190
+ // 检测敏感操作
191
+ if (policy.isSensitiveAction(action)) {
192
+ // 加密处理
193
+ }
194
+
195
+ // 脱敏日志输出
196
+ const sanitizedData = policy.sanitizeForLogging(data);
197
+ ```
198
+
199
+ ## 配置选项
200
+
201
+ 扩展接受以下配置选项:
202
+
203
+ ```typescript
204
+ interface CacheConfig {
205
+ // 全局开关
206
+ enabled?: boolean; // 是否启用扩展(默认: true)
207
+ autoUseCache?: boolean; // 是否自动使用缓存(默认: true)
208
+
209
+ // 场景识别
210
+ scenarioRecognitionEnabled?: boolean; // 是否启用场景识别(默认: true)
211
+ llmClassificationThreshold?: number; // LLM 分类阈值(默认: 70)
212
+
213
+ // 缓存策略
214
+ cacheLevelStrategy?: "auto" | "l3-only" | "l2-only" | "l1-only"; // 缓存层级策略(默认: auto)
215
+ defaultCacheLevel?: string; // 默认缓存层级(默认: L3)
216
+
217
+ // 缓存失效
218
+ pageChangeDetectionEnabled?: boolean; // 是否启用页面变化检测(默认: true)
219
+ changeInvalidationThreshold?: number; // 变化失效阈值(默认: 80)
220
+ invalidationStrategy?: "soft" | "hard"; // 失效策略(默认: soft)
221
+
222
+ // 变量系统
223
+ variableExtractionEnabled?: boolean; // 是否启用变量提取(默认: true)
224
+ allowUserConfirmVariables?: boolean; // 是否允许用户确认变量(默认: false)
225
+
226
+ // 安全
227
+ encryptSensitiveCache?: boolean; // 是否加密敏感缓存(默认: false)
228
+ accessControlEnabled?: boolean; // 是否启用访问控制(默认: false)
229
+ logSanitizationEnabled?: boolean; // 是否启用日志脱敏(默认: true)
230
+
231
+ // 用户体验
232
+ showCacheStatusToUser?: boolean; // 是否向用户显示缓存状态(默认: true)
233
+ enableUserCacheConfirmation?: boolean; // 是否启用用户缓存确认(默认: false)
234
+ enableUserForcedRefresh?: boolean; // 是否启用用户强制刷新(默认: true)
235
+ enableUserCacheErrorReport?: boolean; // 是否启用用户缓存错误报告(默认: true)
236
+
237
+ // 统计
238
+ trackExecutionStats?: boolean; // 是否跟踪执行统计(默认: true)
239
+ statsUpdateInterval?: number; // 统计更新间隔(秒,默认: 60)
240
+ }
241
+ ```
242
+
243
+ ## 支持的场景
244
+
245
+ 扩展内置支持以下场景识别规则:
246
+
247
+ | 场景 | 关键词 | URL 模式 | 缓存层级 | 置信度 |
248
+ | ---------- | ----------------------------------------------- | -------------------------------- | -------- | ------ |
249
+ | login | 登录、登陆、注册、进入、login to、sign in、账号 | /login, /signin, /auth, /account | L3 | 90 |
250
+ | logout | 退出、登出、注销、sign out、logout | /logout, /signout | L3 | 90 |
251
+ | search | 搜索、查找、找、search for、查询 | /search, /query, /list | L3 | 80 |
252
+ | checkout | 结账、结算、支付、收银、买单、checkout | /checkout, /cart, /payment | L3 | 85 |
253
+ | settings | 设置、配置、修改、编辑、个人中心 | /settings, /config, /profile | L3 | 75 |
254
+ | form_fill | 填写、填表单、提交、submit form | - | L2 | 70 |
255
+ | navigate | 打开、进入、跳转、go to、open、navigate | - | L2 | 60 |
256
+ | screenshot | 截图、截图、snapshot、screenshot | - | L1 | 50 |
257
+
258
+ ## 缓存层级
259
+
260
+ | 层级 | 描述 | 用途 |
261
+ | ---- | -------------------------- | ------------------------- |
262
+ | L3 | 场景级缓存(包含变量模板) | 高置信度(≥85)时直接使用 |
263
+ | L2 | 流程级缓存 | 中等置信度(≥70)时使用 |
264
+ | L1 | 原子级缓存 | 低置信度或无场景时使用 |
265
+
266
+ ## 开发和构建
267
+
268
+ ### 本地开发
269
+
270
+ ```bash
271
+ cd extensions/page-action-cache
272
+ pnpm build # 构建扩展
273
+ pnpm test # 运行测试
274
+ pnpm typecheck # 类型检查
275
+ ```
276
+
277
+ ### 添加到 OpenClaw
278
+
279
+ 1. 确保扩展在 `extensions/page-action-cache` 目录
280
+ 2. 在主项目的 `package.json` 中添加 workspace 依赖
281
+ 3. 在适当的启动代码中调用 `initializePageActionCache()`
282
+
283
+ ## 发布到 npm
284
+
285
+ ### 使用发布脚本(推荐)
286
+
287
+ 扩展提供了发布脚本来自动处理 npm 发布时的工作区依赖问题:
288
+
289
+ ```bash
290
+ # 从扩展目录运行发布脚本
291
+ cd extensions/page-action-cache
292
+ ./scripts/npm_publish.sh
293
+ ```
294
+
295
+ 发布脚本会自动:
296
+
297
+ - 移除 `workspace:*` 依赖(npm 不支持此协议)
298
+ - 构建扩展
299
+ - 发布到 npm
300
+
301
+ ### 手动发布
302
+
303
+ 如果需要手动发布,请按以下步骤:
304
+
305
+ ```bash
306
+ # 1. 构建扩展
307
+ cd extensions/page-action-cache
308
+ pnpm build
309
+
310
+ # 2. 临时移除工作区依赖
311
+ node -e "
312
+ const fs = require('fs');
313
+ const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
314
+ delete pkg.dependencies;
315
+ fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
316
+ "
317
+
318
+ # 3. 发布到 npm
319
+ npm publish --access public
320
+
321
+ # 4. 恢复原始配置
322
+ git checkout package.json
323
+ ```
324
+
325
+ **重要说明:**
326
+
327
+ - npm 不支持 `workspace:*` 协议,发布前必须移除工作区依赖
328
+ - 扩展依赖声明在 `peerDependencies` 中,所以移除 `dependencies` 不影响运行时
329
+ - 发布后记得恢复原始 `package.json` 以便本地开发
330
+
331
+ ## 测试
332
+
333
+ 扩展包含集成测试:
334
+
335
+ ```bash
336
+ # 在扩展目录
337
+ cd extensions/page-action-cache
338
+ pnpm test
339
+
340
+ # 运行集成测试(如果需要)
341
+ cd ../..
342
+ pnpm test integration
343
+ ```
344
+
345
+ ## 故障排查
346
+
347
+ ### 扩展未加载
348
+
349
+ 1. 检查依赖是否正确安装
350
+
351
+ ```bash
352
+ npm list | grep page-action-cache
353
+ ```
354
+
355
+ 2. 检查扩展是否被初始化
356
+ - 查看日志中是否有 `[PageActionCache] Extension initialized` 消息
357
+
358
+ ### Hooks 未触发
359
+
360
+ 1. 检查 OpenClaw 是否正确调用了 `initializePageActionCache()`
361
+ 2. 检查配置中的 `enabled` 选项
362
+
363
+ ### 缓存未命中
364
+
365
+ 1. 检查场景识别是否正确工作
366
+ 2. 检查用户输入是否匹配关键词规则
367
+ 3. 查看 `cacheStore.getStats()` 输出
368
+
369
+ ### 敏感数据未加密
370
+
371
+ 1. 检查 `encryptSensitiveCache` 配置是否为 `true`
372
+ 2. 检查敏感字段列表是否正确
373
+ 3. 查看日志输出是否正确脱敏
374
+
375
+ ## 相关文档
376
+
377
+ - [类型定义](./src/types.ts) - 完整的类型定义
378
+ - [实现文档](./IMPLEMENTATION.md) - 详细的实现说明
379
+ - [测试](./tests/integration.test.ts) - 集成测试
380
+
381
+ ## 版本历史
382
+
383
+ - **1.0.0** - 初始版本
384
+ - 完整的 Playwright API 对齐
385
+ - 场景识别、变量解析、缓存存储
386
+ - 安全策略、缓存失效
387
+ - Hooks 自动注册
package/docs/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # Page Action Cache Extension
2
+
3
+ 页面操作缓存扩展 - 降低 token 消耗和操作延迟。
4
+
5
+ ## 简介
6
+
7
+ Page Action Cache 扩展为 OpenClaw 提供智能的浏览器操作缓存功能。通过识别常见场景(登录、搜索、支付等)并缓存相应的操作序列,扩展可以避免重复分析相同的 DOM 结构,大幅降低 token 消耗和操作延迟。
8
+
9
+ ## 功能特性
10
+
11
+ ### 🎯 场景识别
12
+
13
+ 自动识别常见用户场景并匹配缓存:
14
+
15
+ - **登录/登出** - 识别登录和登出操作
16
+ - **搜索** - 识别搜索查询操作
17
+ - **支付** - 识别结账和支付流程
18
+ - **设置** - 识别配置修改操作
19
+ - **表单填写** - 识别表单提交操作
20
+ - **导航** - 识别页面导航操作
21
+
22
+ ### 💾 缓存存储
23
+
24
+ - **MD5 Hash** - 基于 URL + 视口尺寸的哈希值作为缓存键
25
+ - **TTL 失效** - 支持基于时间的缓存过期
26
+ - **文件存储** - 持久化存储在 `~/.openclaw/cache/page-actions/`
27
+ - **统计跟踪** - 自动记录命中率、token 节省等
28
+
29
+ ### 🔄 缓存失效
30
+
31
+ - **DOM 变化检测** - 检测页面结构变化
32
+ - **结构哈希** - 比较表单、按钮、链接等元素
33
+ - **自动刷新** - 高置信度变化时自动失效旧缓存
34
+
35
+ ### 🛡️ 安全策略
36
+
37
+ - **敏感字段加密** - AES-256-GCM 加密密码、token 等敏感数据
38
+ - **访问控制** - 可配置允许访问的用户 ID
39
+ - **日志脱敏** - 自动脱敏敏感字段输出到日志
40
+
41
+ ### 📊 用户体验增强
42
+
43
+ - **缓存状态展示** - 向用户显示缓存命中/未命中状态
44
+ - **用户确认** - 可选的用户缓存确认机制
45
+ - **错误反馈** - 缓存错误的详细反馈
46
+
47
+ ## 快速开始
48
+
49
+ ### 安装依赖
50
+
51
+ ```bash
52
+ # 在 OpenClaw 项目根目录
53
+ pnpm install
54
+ ```
55
+
56
+ ### 初始化扩展
57
+
58
+ ```typescript
59
+ import { initializePageActionCache } from "@openclaw/page-action-cache/hooks-entry";
60
+
61
+ // 使用默认配置
62
+ initializePageActionCache(gatewayApi, {
63
+ enabled: true,
64
+ autoUseCache: true,
65
+ scenarioRecognitionEnabled: true,
66
+ cacheLevelStrategy: "auto",
67
+ });
68
+ ```
69
+
70
+ ### 使用缓存 API
71
+
72
+ ```typescript
73
+ import { getCacheStore } from "@openclaw/page-action-cache";
74
+
75
+ // 保存缓存
76
+ cacheStore.set(url, viewport, actions, {
77
+ scenario: "login",
78
+ cacheLevel: "L3",
79
+ variables: { username: "...", password: "..." },
80
+ });
81
+
82
+ // 获取缓存
83
+ const entry = cacheStore.get(url, viewport);
84
+ if (entry) {
85
+ console.log(`✅ 缓存命中: ${entry.scenario} (${entry.cacheLevel})`);
86
+ }
87
+ ```
88
+
89
+ ## 配置选项
90
+
91
+ 扩展支持以下配置:
92
+
93
+ | 选项 | 类型 | 默认值 | 说明 |
94
+ | ---------------------------- | --------------------------------------------- | ------ | -------------------- |
95
+ | `enabled` | boolean | true | 是否启用扩展 |
96
+ | `autoUseCache` | boolean | true | 是否自动使用缓存 |
97
+ | `scenarioRecognitionEnabled` | boolean | true | 是否启用场景识别 |
98
+ | `cacheLevelStrategy` | "auto" \| "l3-only" \| "l2-only" \| "l1-only" | "auto" | 缓存层级策略 |
99
+ | `pageChangeDetectionEnabled` | boolean | true | 是否启用页面变化检测 |
100
+ | `variableExtractionEnabled` | boolean | true | 是否启用变量提取 |
101
+ | `encryptSensitiveCache` | boolean | false | 是否加密敏感缓存 |
102
+
103
+ ## 缓存层级说明
104
+
105
+ | 层级 | 描述 | 用途 |
106
+ | ------ | -------------------------- | -------------------------- |
107
+ | **L3** | 场景级缓存(包含变量模板) | 高置信度(≥85%)时直接使用 |
108
+ | **L2** | 流程级缓存 | 中等置信度(≥70%)时使用 |
109
+ | **L1** | 原子级缓存 | 低置信度或无场景时使用 |
110
+
111
+ ## 支持的场景
112
+
113
+ | 场景 | 关键词示例 | 缓存层级 |
114
+ | ---------- | ----------------------------- | -------- |
115
+ | login | 登录、账号、login to、sign in | L3 |
116
+ | logout | 退出、登出、sign out | L3 |
117
+ | search | 搜索、查找、search for | L3 |
118
+ | checkout | 结账、支付、checkout | L3 |
119
+ | settings | 设置、配置 | L3 |
120
+ | form_fill | 填写、提交、form | L2 |
121
+ | navigate | 打开、进入、go to | L2 |
122
+ | screenshot | 截图、screenshot | L1 |
123
+
124
+ ## 工作原理
125
+
126
+ ```
127
+ 用户输入 → 场景识别 → 检查缓存 → 返回 LLM 或缓存操作
128
+ ↓ ↓ ↓
129
+ (关键词匹配) (哈希查找) (执行缓存)
130
+ ```
131
+
132
+ ### 场景识别流程
133
+
134
+ 1. **关键词匹配** - 匹配预定义的关键词(最快)
135
+ 2. **URL 模式匹配** - 匹配 URL 模式
136
+ 3. **LLM 分类** - 使用 LLM 进行意图分类(未来)
137
+ 4. **历史学习** - 基于历史匹配学习新场景
138
+
139
+ ### 缓存决策流程
140
+
141
+ 1. 检查缓存是否存在
142
+ 2. 检查缓存是否过期
143
+ 3. 检查页面是否发生变化
144
+ 4. 根据置信度决定是否使用缓存
145
+
146
+ ## 发布和构建
147
+
148
+ ### 发布到 npm
149
+
150
+ 扩展提供了自动发布脚本:
151
+
152
+ ```bash
153
+ cd extensions/page-action-cache
154
+ ./scripts/npm_publish.sh
155
+ ```
156
+
157
+ 发布脚本会处理 npm 不支持的 `workspace:*` 协议问题。
158
+
159
+ ### 手动构建和发布
160
+
161
+ ```bash
162
+ # 构建扩展
163
+ cd extensions/page-action-cache
164
+ pnpm build
165
+
166
+ # 运行测试
167
+ pnpm test
168
+
169
+ # 类型检查
170
+ pnpm typecheck
171
+ ```
172
+
173
+ **注意:** 发布到 npm 时需要先移除 `package.json` 中的 `workspace:*` 依赖,因为 npm 不支持此协议。
174
+
175
+ ## 更多文档
176
+
177
+ - [集成指南](./INTEGRATION.md) - 如何集成到 OpenClaw
178
+ - [实现文档](./IMPLEMENTATION.md) - 详细的技术实现
179
+ - [类型定义](../src/types.ts) - 完整的类型定义
180
+
181
+ ## 版本
182
+
183
+ 当前版本: 1.0.0
package/index.ts ADDED
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Page Action Cache Extension
3
+ * 页面操作缓存扩展入口
4
+ *
5
+ * 功能:
6
+ * - 缓存 LLM 生成的浏览器操作序列
7
+ * - 避免重复分析相同页面
8
+ * - 大幅降低 token 消耗和操作延迟
9
+ *
10
+ * 使用方法:
11
+ * 1. 安装扩展:npm install @openclaw/page-action-cache
12
+ * 2. 在配置中启用扩展
13
+ * 3. LLM 会自动使用缓存的操作序列
14
+ */
15
+
16
+ import type { CacheConfig } from "./src/types.js";
17
+ import { registerPageActionCacheHooks } from "./src/hooks.js";
18
+ import { getToolDefinitions } from "./src/tools.js";
19
+
20
+ // ============================================================================
21
+ // 扩展元数据
22
+ // ============================================================================
23
+
24
+ export const metadata = {
25
+ name: "Page Action Cache",
26
+ version: "1.0.0",
27
+ description:
28
+ "缓存 LLM 浏览器操作序列,避免重复分析相同页面,大幅降低 token 消耗",
29
+ author: "OpenClaw",
30
+ license: "MIT",
31
+ };
32
+
33
+ // ============================================================================
34
+ // 默认配置
35
+ // ============================================================================
36
+
37
+ const DEFAULT_CONFIG: CacheConfig = {
38
+ enabled: true,
39
+ autoUseCache: true,
40
+ scenarioRecognitionEnabled: true,
41
+ llmClassificationThreshold: 70,
42
+ cacheLevelStrategy: "auto",
43
+ defaultCacheLevel: "L3",
44
+ pageChangeDetectionEnabled: true,
45
+ changeInvalidationThreshold: 80,
46
+ invalidationStrategy: "soft",
47
+ maxVersionsPerEntry: 3,
48
+ variableExtractionEnabled: true,
49
+ allowUserConfirmVariables: false,
50
+ encryptSensitiveCache: false,
51
+ accessControlEnabled: false,
52
+ allowedUserIds: [],
53
+ logSanitizationEnabled: true,
54
+ showCacheStatusToUser: true,
55
+ enableUserCacheConfirmation: false,
56
+ enableUserForcedRefresh: true,
57
+ enableUserCacheErrorReport: true,
58
+ trackExecutionStats: true,
59
+ statsUpdateInterval: 60,
60
+ };
61
+
62
+ // ============================================================================
63
+ // 扩展初始化
64
+ // ============================================================================
65
+
66
+ /**
67
+ * 扩展初始化函数
68
+ */
69
+ export function activate(api: any, config?: Partial<CacheConfig>): void {
70
+ console.log(`[PageActionCache] Initializing v${metadata.version}...`);
71
+
72
+ const finalConfig = { ...DEFAULT_CONFIG, ...config };
73
+
74
+ // 注册 Hooks
75
+ registerPageActionCacheHooks(api, finalConfig);
76
+
77
+ // 注册自定义工具
78
+ const toolDefinitions = getToolDefinitions();
79
+ for (const toolDef of toolDefinitions) {
80
+ api.registerTool?.(toolDef);
81
+ console.log(`[PageActionCache] Registered tool: ${toolDef.name}`);
82
+ }
83
+
84
+ console.log("[PageActionCache] Extension activated successfully");
85
+ }
86
+
87
+ /**
88
+ * 扩展停用函数
89
+ */
90
+ export function deactivate(): void {
91
+ console.log("[PageActionCache] Deactivating...");
92
+ // 清理资源
93
+ console.log("[PageActionCache] Extension deactivated");
94
+ }
95
+
96
+ // ============================================================================
97
+ // 导出(用于测试和调试)
98
+ // ============================================================================
99
+
100
+ export * from "./src/types.js";
101
+ export { getCacheStore } from "./src/cache-store.js";
102
+ export { getScenarioRecognizer } from "./src/scenario-recognizer.js";
103
+ export { getVariableResolver } from "./src/variable-resolver.js";
104
+ export { getCacheInvalidator } from "./src/cache-invalidator.js";
105
+ export { getSecurityPolicy } from "./src/security-policy.js";
106
+ export { getUXEnhancer } from "./src/ux-enhancer.js";
107
+ export { getActionsExecutor } from "./src/actions-executor.js";
108
+ export { getCacheStrategyFactory } from "./src/cache-strategy.js";
109
+
110
+ // ============================================================================
111
+ // 默认导出(OpenClaw 扩展系统使用)
112
+ // ============================================================================
113
+
114
+ export default {
115
+ metadata,
116
+ activate,
117
+ deactivate,
118
+ };