lightclawbot 1.0.6 → 1.0.8

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 (61) hide show
  1. package/README.md +47 -213
  2. package/dist/src/config.d.ts +8 -8
  3. package/dist/src/config.d.ts.map +1 -1
  4. package/dist/src/config.js +9 -9
  5. package/dist/src/config.js.map +1 -1
  6. package/dist/src/dedup.d.ts +6 -1
  7. package/dist/src/dedup.d.ts.map +1 -1
  8. package/dist/src/dedup.js +27 -14
  9. package/dist/src/dedup.js.map +1 -1
  10. package/dist/src/download-tool.d.ts +1 -1
  11. package/dist/src/download-tool.js +9 -9
  12. package/dist/src/download-tool.js.map +1 -1
  13. package/dist/src/file-storage.d.ts +9 -9
  14. package/dist/src/file-storage.d.ts.map +1 -1
  15. package/dist/src/file-storage.js +10 -10
  16. package/dist/src/file-storage.js.map +1 -1
  17. package/dist/src/format-urls.d.ts +5 -5
  18. package/dist/src/format-urls.js +8 -8
  19. package/dist/src/format-urls.js.map +1 -1
  20. package/dist/src/gateway.d.ts.map +1 -1
  21. package/dist/src/gateway.js +11 -8
  22. package/dist/src/gateway.js.map +1 -1
  23. package/dist/src/history/text-processing.d.ts.map +1 -1
  24. package/dist/src/history/text-processing.js +2 -0
  25. package/dist/src/history/text-processing.js.map +1 -1
  26. package/dist/src/inbound.d.ts.map +1 -1
  27. package/dist/src/inbound.js +18 -19
  28. package/dist/src/inbound.js.map +1 -1
  29. package/dist/src/socket/handlers.d.ts +26 -0
  30. package/dist/src/socket/handlers.d.ts.map +1 -0
  31. package/dist/src/socket/handlers.js +130 -0
  32. package/dist/src/socket/handlers.js.map +1 -0
  33. package/dist/src/socket/index.d.ts +11 -0
  34. package/dist/src/socket/index.d.ts.map +1 -0
  35. package/dist/src/socket/index.js +9 -0
  36. package/dist/src/socket/index.js.map +1 -0
  37. package/dist/src/socket/registry.d.ts +59 -0
  38. package/dist/src/socket/registry.d.ts.map +1 -0
  39. package/dist/src/socket/registry.js +125 -0
  40. package/dist/src/socket/registry.js.map +1 -0
  41. package/dist/src/socket/reliable-emitter.d.ts +79 -0
  42. package/dist/src/socket/reliable-emitter.d.ts.map +1 -0
  43. package/dist/src/socket/reliable-emitter.js +213 -0
  44. package/dist/src/socket/reliable-emitter.js.map +1 -0
  45. package/dist/src/socket-handlers.d.ts.map +1 -1
  46. package/dist/src/socket-handlers.js +45 -45
  47. package/dist/src/socket-handlers.js.map +1 -1
  48. package/dist/src/types.d.ts +2 -2
  49. package/dist/src/types.d.ts.map +1 -1
  50. package/dist/src/upload-tool.d.ts +1 -1
  51. package/dist/src/upload-tool.js +3 -3
  52. package/dist/src/upload-tool.js.map +1 -1
  53. package/package.json +1 -1
  54. package/skills/lightclaw-media/SKILL.md +22 -102
  55. package/dist/public/data/scripts/manifest.json +0 -11
  56. package/dist/public/data/scripts/preflight.78097a58.sh +0 -94
  57. package/dist/public/data/scripts/preflight.sh +0 -94
  58. package/dist/src/session-history.d.ts +0 -88
  59. package/dist/src/session-history.d.ts.map +0 -1
  60. package/dist/src/session-history.js +0 -598
  61. package/dist/src/session-history.js.map +0 -1
package/README.md CHANGED
@@ -1,241 +1,75 @@
1
- # LightClaw — OpenClaw Channel 插件
1
+ # LightClawBot
2
2
 
3
- 对接 OpenClaw 框架的 LightClaw Bot channel 插件,支持多 apiKey(多账户)模式。
3
+ [OpenClaw](https://github.com/openclaw/openclaw) Channel 插件
4
4
 
5
- ---
5
+ [![npm version](https://img.shields.io/npm/v/lightclawbot)](https://www.npmjs.com/package/lightclawbot)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
7
 
7
- ## 目录
8
+ ## 特性
8
9
 
9
- - [配置](#配置)
10
- - [多账户 apiKey 体系](#多账户-apikey-体系)
11
- - [整体架构](#整体架构)
12
- - [数据流全景](#数据流全景)
13
- - [两级映射设计](#两级映射设计)
14
- - [resolveEffectiveApiKey 统一入口](#resolveeffectiveapikey-统一入口)
15
- - [为什么不能只用一级映射](#为什么不能只用一级映射)
16
- - [关键模块说明](#关键模块说明)
17
- - [调试指南](#调试指南)
18
- - [已知约束与注意事项](#已知约束与注意事项)
10
+ - ⚡ 流式回复,AI 响应实时推送
11
+ - 定时任务,支持一次性提醒和周期性 Cron 任务
12
+ - 💬 主动消息推送和历史消息读取
19
13
 
20
- ---
14
+ ## 安装
15
+
16
+ ```bash
17
+ openclaw plugins install lightclawbot
18
+ ```
21
19
 
22
20
  ## 配置
23
21
 
24
- `~/.openclaw/openclaw.json` 中 `channels.lightclawbot` 段:
22
+ 编辑 `~/.openclaw/openclaw.json`:
25
23
 
26
24
  ```json
27
25
  {
28
26
  "channels": {
29
27
  "lightclawbot": {
30
- "apiKeys": ["key-1", "key-2", "key-3"],
31
- "enabled": true,
32
- "dmScope": "per-channel-peer"
28
+ "apiKeys": ["key-1", "key-2"],
29
+ "enabled": true
33
30
  }
34
31
  }
35
32
  }
36
33
  ```
37
34
 
38
- | 字段 | 说明 |
39
- |------|------|
40
- | `apiKeys` | apiKey 数组,每个 key 对应一个 uin(用户身份)。`apiKeys[0]` 为主 key,同时作为默认 fallback |
41
- | `dmScope` | 会话隔离粒度,推荐 `"per-channel-peer"`(每用户独立 session) |
42
-
43
- > **注意**:配置中只有 `apiKeys`(复数数组),没有 `apiKey`(单数字段)。运行时 `account.apiKey` 的值取自 `apiKeys[0]`。
44
-
45
- ---
46
-
47
- ## 多账户 apiKey 体系
48
-
49
- ### 整体架构
50
-
51
- 多 apiKey 模式下,一个 Bot 可以持有多个 apiKey,每个 apiKey 关联到不同的 uin(用户身份)。插件需要在处理消息和执行工具时,正确选取当前用户对应的 apiKey。
52
-
53
- 核心挑战:**消息处理(inbound)** 和 **工具执行(tool)** 拿到的上下文信息不同:
54
-
55
- | 阶段 | 可用标识 | 不可用标识 |
56
- |------|---------|-----------|
57
- | inbound 消息到达 | `msg.senderId`(uin) | sessionKey(需路由解析后才知道) |
58
- | tool 执行 | `ctx.sessionKey` | uin(框架不传递) |
59
-
60
- 因此需要 **两级映射** 来桥接两个阶段。
61
-
62
- ### 数据流全景
63
-
64
- ```
65
- ┌─────────────────────────────────────────────────────────────────┐
66
- │ Gateway 启动(一次性) │
67
- │ │
68
- │ 1. 读取配置中的 apiKeys 数组 │
69
- │ 2. 对每个 apiKey 调用 /user/current 获取其 uin │
70
- │ 3. 构建 uin→apiKey 映射表(apiKeyMap) │
71
- │ 4. setApiKeyMap(apiKeyMap, apiKeys[0]) │
72
- │ ├─ globalApiKeyMap = { uin_A→key_1, uin_B→key_2, ... } │
73
- │ └─ globalDefaultApiKey = apiKeys[0] (fallback 兜底) │
74
- └─────────────────────────────────────────────────────────────────┘
75
-
76
-
77
- ┌─────────────────────────────────────────────────────────────────┐
78
- │ Inbound 消息处理(每条消息) │
79
- │ │
80
- │ 1. 收到消息,msg.senderId = uin_A │
81
- │ 2. resolveEffectiveApiKey({ senderId: uin_A }) │
82
- │ → 命中 globalApiKeyMap → 返回 key_1 │
83
- │ 3. resolveAgentRoute(...) → 得到 route.sessionKey │
84
- │ 4. setSessionApiKey(route.sessionKey, key_1) │
85
- │ └─ sessionKeyToApiKey = { "agent:main:lc:direct:uin_A"→key_1 } │
86
- │ 5. 处理消息、下载/上传附件(均使用 key_1) │
87
- │ 6. 分发给 AI 引擎 │
88
- └─────────────────────────────────────────────────────────────────┘
89
-
90
-
91
- ┌─────────────────────────────────────────────────────────────────┐
92
- │ Tool 执行(AI 调用工具时) │
93
- │ │
94
- │ 1. 框架传入 ctx.sessionKey = "agent:main:lc:direct:uin_A" │
95
- │ 2. resolveEffectiveApiKey({ sessionKey }) │
96
- │ → 命中 sessionKeyToApiKey → 返回 key_1 │
97
- │ 3. 使用 key_1 上传/下载文件到 COS │
98
- └─────────────────────────────────────────────────────────────────┘
99
- ```
35
+ | 字段 | 类型 | 说明 |
36
+ |------|------|------|
37
+ | `apiKeys` | `string[]` | API Key 数组,每个对应一个用户身份。`apiKeys[0]` 为主 Key |
38
+ | `enabled` | `boolean` | 是否启用 |
100
39
 
101
- ### 两级映射设计
40
+ ## 开发
102
41
 
103
- ```
104
- config.ts 中维护的全局状态:
105
-
106
- ┌─────────────────────────────────────────────────────────┐
107
- │ 第1级:globalApiKeyMap (uin → apiKey) │
108
- │ 写入时机:gateway 启动时(setApiKeyMap,一次性) │
109
- │ 读取时机:inbound 处理消息时 │
110
- │ 数据规模:= apiKeys 数量(固定,不随消息增长) │
111
- └─────────────────────────────────────────────────────────┘
112
-
113
- ┌─────────────────────────────────────────────────────────┐
114
- │ 第2级:sessionKeyToApiKey (sessionKey → apiKey) │
115
- │ 写入时机:每条消息 inbound 处理时(setSessionApiKey) │
116
- │ 读取时机:tool 执行时 │
117
- │ 数据规模:= 活跃用户数(动态增长,但不会很大) │
118
- └─────────────────────────────────────────────────────────┘
119
-
120
- ┌─────────────────────────────────────────────────────────┐
121
- │ 兜底:globalDefaultApiKey │
122
- │ 值 = apiKeys[0],当以上两级都未命中时使用 │
123
- └─────────────────────────────────────────────────────────┘
42
+ ```bash
43
+ npm run build # 编译
44
+ npm run typecheck # 类型检查
124
45
  ```
125
46
 
126
- ### resolveEffectiveApiKey 统一入口
47
+ 项目附带 Mock 用于本地调试:
127
48
 
128
- 所有需要获取 apiKey 的地方(inbound / upload-tool / download-tool)统一调用此函数:
129
-
130
- ```typescript
131
- resolveEffectiveApiKey(params: {
132
- sessionKey?: string; // tool 执行时传入
133
- senderId?: string; // inbound 处理时传入
134
- }): string
49
+ ```bash
50
+ cd test-server
51
+ npm install
52
+ npm start # 启动 Mock 服务端
53
+ npm run client # 启动测试客户端
135
54
  ```
136
55
 
137
- **查找优先级**:
138
-
139
- | 优先级 | 数据源 | 场景 |
140
- |:------:|--------|------|
141
- | 1 | `sessionKeyToApiKey[sessionKey]` | tool 执行时的主路径 |
142
- | 2 | `globalApiKeyMap[senderId]` | inbound 处理时的主路径 |
143
- | 3 | `globalApiKeyMap[extractUinFromSessionKey(sessionKey)]` | 兜底:从 sessionKey 解析 uin |
144
- | 4 | `globalDefaultApiKey` | 最终 fallback |
145
-
146
- ### 为什么不能只用一级映射
147
-
148
- **方案:只保留 sessionKeyToApiKey,去掉 globalApiKeyMap?**
149
-
150
- 不可行,原因是 **时序依赖**:
56
+ ## 项目结构
151
57
 
152
58
  ```
153
- 用户首条消息到达 inbound:
154
-
155
- ├─ 此时需要 apiKey(用于下载附件等)
156
- │ → sessionKey 尚未算出(要先调 resolveAgentRoute)
157
- 即使 sessionKey 已知,sessionKeyToApiKey 中没有记录(首条消息,从未写入过)
158
- │ → 无法获取 apiKey
159
-
160
- └─ uin(msg.senderId)立即可用
161
- globalApiKeyMap 在 gateway 启动时就已构建好
162
- 可直接查到 apiKey
59
+ src/
60
+ ├── channel.ts # 插件入口,注册、能力声明、生命周期
61
+ ├── config.ts # 配置解析,API Key 映射管理
62
+ ├── gateway.ts # Socket.IO 连接管理,心跳,重连
63
+ ├── inbound.ts # 入站消息处理 文件处理 AI 分发
64
+ ├── outbound.ts # 出站消息(WebSocket)
65
+ ├── socket-handlers.ts # Socket.IO 事件绑定
66
+ ├── socket-registry.ts # Socket 注册表,离线缓冲
67
+ ├── file-storage.ts # 文件存储封装
68
+ ├── upload-tool.ts # AI 工具:上传文件
69
+ ├── download-tool.ts # AI 工具:下载/获取文件 URL
70
+ ├── dedup.ts # 消息去重与防抖
71
+ ├── media.ts # 媒体工具函数
72
+ ├── format-urls.ts # 文件 URL 自动转 Markdown 链接
73
+ ├── types.ts # 类型定义
74
+ └── history/ # 历史消息读取
163
75
  ```
164
-
165
- **`globalApiKeyMap` 是冷启动数据源(gateway 启动时预建),`sessionKeyToApiKey` 是运行时缓存(消息处理时按需写入)。** 两者解决不同阶段的问题,缺一不可。
166
-
167
- ---
168
-
169
- ## 关键模块说明
170
-
171
- | 文件 | 职责 | 与 apiKey 体系的关系 |
172
- |------|------|---------------------|
173
- | `src/config.ts` | 配置解析 + apiKey 映射管理 | 定义 `setApiKeyMap`、`setSessionApiKey`、`resolveEffectiveApiKey` |
174
- | `src/gateway.ts` | Socket.IO 连接生命周期管理 | 启动时调用 `resolveApiKeyIdentities` + `setApiKeyMap` 构建第1级映射 |
175
- | `src/inbound.ts` | 入站消息处理 | 调用 `resolveEffectiveApiKey({ senderId })` 获取 apiKey,再调用 `setSessionApiKey` 写入第2级映射 |
176
- | `src/upload-tool.ts` | 文件上传工具 | 调用 `resolveEffectiveApiKey({ sessionKey })` 获取 apiKey,传给 COS 上传 |
177
- | `src/download-tool.ts` | 文件下载/转发工具 | 同上 |
178
- | `src/file-storage.ts` | COS 文件存储封装 | 接收 `{ apiKey }` 参数,执行实际的 HTTP 上传/下载 |
179
-
180
- ### gateway.ts 中的 resolveApiKeyIdentities
181
-
182
- ```
183
- 对每个 apiKey 调用 /user/current,一次遍历完成:
184
- - 提取每个 key 对应的 uin,构建 uin→apiKey 映射
185
- - 从第一个成功的 key 中提取 botClientId(所有 key 共享同一个 bot)
186
- - 容错:第一个 key 必须成功(否则无 botId,直接抛异常),后续 key 失败可降级跳过
187
- - 总计 N 次 HTTP 请求,无重复调用
188
- ```
189
-
190
- ### inbound.ts 中的 mainSessionKey 安全约束
191
-
192
- ```typescript
193
- // ⚠️ 只写入 per-channel-peer 的 sessionKey,不写入 mainSessionKey
194
- // mainSessionKey(= "agent:main:main")是全局共享的,所有用户消息都会覆盖它,
195
- // 导致最后一个用户的 apiKey 覆盖前一个用户,产生并发安全问题。
196
- if (route?.sessionKey) {
197
- setSessionApiKey(route.sessionKey, effectiveApiKey);
198
- }
199
- ```
200
-
201
- ---
202
-
203
- ## 调试指南
204
-
205
- ### 查看 apiKey 选取日志
206
-
207
- upload-tool 和 download-tool 中保留了 `log.warn` 级别的调试日志:
208
-
209
- ```
210
- [lightclaw_upload_file] sessionKey="agent:main:lightclawbot:direct:12345", accountId="default"
211
- [lightclaw_upload_file] resolved apiKey="key1abcd..."
212
- ```
213
-
214
- 这些日志在终端始终可见(warn 级别不会被框架过滤)。
215
-
216
- ### 框架日志级别说明
217
-
218
- | 级别 | 终端可见性 | 适用场景 |
219
- |------|-----------|---------|
220
- | `log.debug` | 通常不可见 | 详细流程追踪 |
221
- | `log.info` | 取决于配置 | 常规信息 |
222
- | `log.warn` | **始终可见** | 调试关键路径、apiKey 选取 |
223
- | `log.error` | **始终可见** | 错误 |
224
-
225
- ### apiKey 日志脱敏
226
-
227
- 所有日志中 apiKey 只打印前 8 位(如 `key1abcd...`),避免泄露完整密钥。
228
-
229
- ---
230
-
231
- ## 已知约束与注意事项
232
-
233
- 1. **dmScope 必须为 `per-channel-peer`**:确保每个用户有独立的 sessionKey,避免 `sessionKeyToApiKey` 并发覆盖。如果使用 `main`(默认值),所有用户共享同一个 sessionKey,多 key 模式会出问题。
234
-
235
- 2. **sessionKeyToApiKey 只增不减**:当前实现中没有过期清理机制。在活跃用户数有限的场景下不是问题。如果未来用户量极大,需考虑 LRU 或 TTL 淘汰策略。
236
-
237
- 3. **gateway 重启会重建 globalApiKeyMap**:`setApiKeyMap` 在每次 `startGateway` 时调用,会覆盖之前的映射。但 `sessionKeyToApiKey` 是累积的,重启后会被清空(模块级变量)。
238
-
239
- 4. **单 key 模式兼容**:当 `apiKeys` 只有一个元素时,`globalApiKeyMap` 只有一条记录,`resolveEffectiveApiKey` 最终都会 fallback 到 `globalDefaultApiKey`,行为与之前一致。
240
-
241
- 5. **环境变量兜底**:如果配置文件中没有 `apiKeys`,会尝试从 `LIGHTCLAW_API_KEY` 环境变量读取。
@@ -24,7 +24,7 @@ export declare const DOMAIN = "lightai.cloud.tencent.com";
24
24
  export declare const WS_URL = "wss://lightai.cloud.tencent.com";
25
25
  /** HTTP API 基础地址 */
26
26
  export declare const API_BASE_URL = "https://lightai.cloud.tencent.com";
27
- /** COS 相关配置 */
27
+ /** 文件存储相关配置 */
28
28
  export declare const COS_BASE_URL = "https://lightai.cloud.tencent.com";
29
29
  /** Socket.IO 连接路径 */
30
30
  export declare const SOCKET_PATH = "/claw-socket";
@@ -71,10 +71,10 @@ export declare function resolveEffectiveApiKey(params: {
71
71
  export declare function extractUinFromSessionKey(sessionKey: string): string | undefined;
72
72
  /** 获取当前用户信息(用于提取 botId) */
73
73
  export declare const API_PATH_USER_CURRENT = "/user/current";
74
- /** COS 文件上传接口 */
75
- export declare const API_PATH_UPLOAD = "/cosmanager/uploadFile";
76
- /** COS 文件下载接口 */
77
- export declare const API_PATH_DOWNLOAD = "/cosmanager/getFileStream";
74
+ /** 文件上传接口 */
75
+ export declare const API_PATH_UPLOAD = "/drive/save";
76
+ /** 文件下载接口 */
77
+ export declare const API_PATH_DOWNLOAD = "/drive/preview";
78
78
  export declare const EVENT_MESSAGE_PRIVATE = "message:private";
79
79
  export declare const EVENT_HISTORY_REQUEST = "message:history:request";
80
80
  export declare const EVENT_HISTORY_RESPONSE = "message:history:response";
@@ -84,7 +84,7 @@ export declare const EVENT_SESSIONS_RESPONSE = "sessions:response";
84
84
  export declare const REPLY_TIMEOUT = 120000;
85
85
  /** 文件上传超时时间(ms) */
86
86
  export declare const UPLOAD_TIMEOUT = 120000;
87
- /** 媒体文件最大字节数(50MB) */
87
+ /** 媒体文件最大字节数(100MB) */
88
88
  export declare const MEDIA_MAX_BYTES: number;
89
89
  /** 消息队列最大容量 */
90
90
  export declare const MESSAGE_QUEUE_SIZE = 1000;
@@ -96,8 +96,8 @@ export declare const QUEUE_POLL_INTERVAL = 200;
96
96
  export declare const DEDUP_TTL: number;
97
97
  /** 去重 Map 最大容量 */
98
98
  export declare const DEDUP_MAX_SIZE = 5000;
99
- /** History 请求节流间隔(ms) */
100
- export declare const HISTORY_THROTTLE_MS = 2000;
99
+ /** History 请求防抖间隔(ms) */
100
+ export declare const HISTORY_THROTTLE_MS = 200;
101
101
  /** 节流 Map 最大容量 */
102
102
  export declare const HISTORY_THROTTLE_MAX_SIZE = 1000;
103
103
  /** Health-monitor 心跳间隔(ms),需小于框架的 stale-socket 阈值(30 分钟) */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export const DOMAIN = "lightai.cloud.tencent.com";
28
28
  export const WS_URL = `wss://${DOMAIN}`;
29
29
  /** HTTP API 基础地址 */
30
30
  export const API_BASE_URL = `https://${DOMAIN}`;
31
- /** COS 相关配置 */
31
+ /** 文件存储相关配置 */
32
32
  export const COS_BASE_URL = `https://${DOMAIN}`;
33
33
  // ============================================================
34
34
  // Socket.IO 配置
@@ -146,10 +146,10 @@ export function extractUinFromSessionKey(sessionKey) {
146
146
  // ============================================================
147
147
  /** 获取当前用户信息(用于提取 botId) */
148
148
  export const API_PATH_USER_CURRENT = "/user/current";
149
- /** COS 文件上传接口 */
150
- export const API_PATH_UPLOAD = "/cosmanager/uploadFile";
151
- /** COS 文件下载接口 */
152
- export const API_PATH_DOWNLOAD = "/cosmanager/getFileStream";
149
+ /** 文件上传接口 */
150
+ export const API_PATH_UPLOAD = "/drive/save";
151
+ /** 文件下载接口 */
152
+ export const API_PATH_DOWNLOAD = "/drive/preview";
153
153
  // ============================================================
154
154
  // Socket.IO 事件名
155
155
  // ============================================================
@@ -165,8 +165,8 @@ export const EVENT_SESSIONS_RESPONSE = "sessions:response";
165
165
  export const REPLY_TIMEOUT = 120_000;
166
166
  /** 文件上传超时时间(ms) */
167
167
  export const UPLOAD_TIMEOUT = 120_000;
168
- /** 媒体文件最大字节数(50MB) */
169
- export const MEDIA_MAX_BYTES = 50 * 1024 * 1024;
168
+ /** 媒体文件最大字节数(100MB) */
169
+ export const MEDIA_MAX_BYTES = 100 * 1024 * 1024;
170
170
  // ============================================================
171
171
  // 消息队列配置
172
172
  // ============================================================
@@ -183,8 +183,8 @@ export const QUEUE_POLL_INTERVAL = 200;
183
183
  export const DEDUP_TTL = 10 * 60 * 1000;
184
184
  /** 去重 Map 最大容量 */
185
185
  export const DEDUP_MAX_SIZE = 5000;
186
- /** History 请求节流间隔(ms) */
187
- export const HISTORY_THROTTLE_MS = 2000;
186
+ /** History 请求防抖间隔(ms) */
187
+ export const HISTORY_THROTTLE_MS = 200;
188
188
  /** 节流 Map 最大容量 */
189
189
  export const HISTORY_THROTTLE_MAX_SIZE = 1000;
190
190
  // ============================================================
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@
2
2
  * LightClaw — 消息去重 & 节流 & ID 生成
3
3
  */
4
4
  export declare function isDuplicate(messageId: string): boolean;
5
- export declare function isHistoryRequestThrottled(userId: string): boolean;
5
+ /**
6
+ * 对同一用户的 history 请求做防抖:
7
+ * 在 HISTORY_THROTTLE_MS 窗口内如果有新请求到来,取消前一次,
8
+ * 只在最后一次请求后延迟 HISTORY_THROTTLE_MS 再执行 callback。
9
+ */
10
+ export declare function debounceHistoryRequest(userId: string, callback: () => void): void;
6
11
  export declare function generateMsgId(): string;
7
12
  //# sourceMappingURL=dedup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/dedup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAUtD;AASD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAWjE;AAQD,wBAAgB,aAAa,IAAI,MAAM,CAKtC"}
1
+ {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/dedup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAUtD;AASD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAsBjF;AAQD,wBAAgB,aAAa,IAAI,MAAM,CAKtC"}
package/dist/src/dedup.js CHANGED
@@ -20,23 +20,36 @@ export function isDuplicate(messageId) {
20
20
  return false;
21
21
  }
22
22
  // ============================================================
23
- // History 请求节流(per-user,防止短时间内重复拉取)
23
+ // History 请求防抖(per-user,高频请求只处理最后一条)
24
24
  // ============================================================
25
- /** userId → 上次处理 history 请求的时间戳 */
26
- const historyRequestThrottle = new Map();
27
- export function isHistoryRequestThrottled(userId) {
28
- const now = Date.now();
29
- const last = historyRequestThrottle.get(userId);
30
- if (last && now - last < HISTORY_THROTTLE_MS)
31
- return true;
32
- historyRequestThrottle.set(userId, now);
33
- if (historyRequestThrottle.size > HISTORY_THROTTLE_MAX_SIZE) {
34
- for (const [id, ts] of historyRequestThrottle) {
35
- if (now - ts > HISTORY_THROTTLE_MS * 5)
36
- historyRequestThrottle.delete(id);
25
+ /** userId → 防抖 timer */
26
+ const historyDebounceTimers = new Map();
27
+ /**
28
+ * 对同一用户的 history 请求做防抖:
29
+ * HISTORY_THROTTLE_MS 窗口内如果有新请求到来,取消前一次,
30
+ * 只在最后一次请求后延迟 HISTORY_THROTTLE_MS 再执行 callback。
31
+ */
32
+ export function debounceHistoryRequest(userId, callback) {
33
+ const existing = historyDebounceTimers.get(userId);
34
+ if (existing)
35
+ clearTimeout(existing);
36
+ const timer = setTimeout(() => {
37
+ historyDebounceTimers.delete(userId);
38
+ callback();
39
+ }, HISTORY_THROTTLE_MS);
40
+ historyDebounceTimers.set(userId, timer);
41
+ // 防止 Map 无限膨胀:清理过期条目
42
+ if (historyDebounceTimers.size > HISTORY_THROTTLE_MAX_SIZE) {
43
+ // timer 存在即未过期,但为安全起见限制总量
44
+ const iter = historyDebounceTimers.keys();
45
+ const oldest = iter.next().value;
46
+ if (oldest && oldest !== userId) {
47
+ const oldTimer = historyDebounceTimers.get(oldest);
48
+ if (oldTimer)
49
+ clearTimeout(oldTimer);
50
+ historyDebounceTimers.delete(oldest);
37
51
  }
38
52
  }
39
- return false;
40
53
  }
41
54
  // ============================================================
42
55
  // 生成消息 ID
@@ -1 +1 @@
1
- {"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/dedup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,+DAA+D;AAC/D,OAAO;AACP,+DAA+D;AAE/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,gBAAgB,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACxC,IAAI,GAAG,GAAG,EAAE,GAAG,SAAS;gBAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D;AAE/D,mCAAmC;AACnC,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEzD,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC1D,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,sBAAsB,CAAC,IAAI,GAAG,yBAAyB,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,sBAAsB,EAAE,CAAC;YAC9C,IAAI,GAAG,GAAG,EAAE,GAAG,mBAAmB,GAAG,CAAC;gBAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAE/D,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/dedup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,+DAA+D;AAC/D,OAAO;AACP,+DAA+D;AAE/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,gBAAgB,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACxC,IAAI,GAAG,GAAG,EAAE,GAAG,SAAS;gBAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAE/D,wBAAwB;AACxB,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAyC,CAAC;AAE/E;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,QAAoB;IACzE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,QAAQ;QAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAExB,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEzC,qBAAqB;IACrB,IAAI,qBAAqB,CAAC,IAAI,GAAG,yBAAyB,EAAE,CAAC;QAC3D,0BAA0B;QAC1B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACjC,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,QAAQ;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAE/D,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAChC,CAAC"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 注册为 OpenClaw Agent Tool,允许 AI:
5
5
  * 1. 获取之前上传文件的公网下载链接
6
- * 2. 将 COS 上的文件下载到本地工作目录
6
+ * 2. 将云端文件下载到本地工作目录
7
7
  *
8
8
  * 工具名: lightclaw_get_file_url
9
9
  */
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 注册为 OpenClaw Agent Tool,允许 AI:
5
5
  * 1. 获取之前上传文件的公网下载链接
6
- * 2. 将 COS 上的文件下载到本地工作目录
6
+ * 2. 将云端文件下载到本地工作目录
7
7
  *
8
8
  * 工具名: lightclaw_get_file_url
9
9
  */
@@ -23,13 +23,13 @@ export const downloadToolSchema = {
23
23
  type: "string",
24
24
  enum: ["get_url", "download_to_local", "upload_and_get_url"],
25
25
  description: "Action to perform: " +
26
- "'get_url' — get the public download URL for a previously uploaded file (by COS filePath); " +
27
- "'download_to_local' — download a file from COS to local directory; " +
26
+ "'get_url' — get the public download URL for a previously uploaded file (by filePath); " +
27
+ "'download_to_local' — download a cloud file to local directory; " +
28
28
  "'upload_and_get_url' — upload a local file and return its public download URL.",
29
29
  },
30
30
  filePath: {
31
31
  type: "string",
32
- description: "For 'get_url' and 'download_to_local': the COS file path (e.g. '2026-03-06/report.pdf'). " +
32
+ description: "For 'get_url' and 'download_to_local': the cloud file path (e.g. '2026-03-06/report.pdf'). " +
33
33
  "For 'upload_and_get_url': the local file path to upload.",
34
34
  },
35
35
  localDir: {
@@ -51,17 +51,17 @@ export function registerDownloadTool(api) {
51
51
  const sessionKey = ctx.sessionKey;
52
52
  return {
53
53
  name: DOWNLOAD_TOOL_NAME,
54
- description: "Manage files on Tencent COS cloud storage. " +
54
+ description: "Manage files on cloud storage. " +
55
55
  "Actions: " +
56
- "(1) 'get_url' — get a public download URL for a file already uploaded to COS (by its COS filePath); " +
57
- "(2) 'download_to_local' — download a COS file back to the local filesystem for further processing; " +
58
- "(3) 'upload_and_get_url' — upload a single local file to COS and return its public download URL. " +
56
+ "(1) 'get_url' — get a public download URL for a previously uploaded file (by its filePath); " +
57
+ "(2) 'download_to_local' — download a cloud file back to the local filesystem for further processing; " +
58
+ "(3) 'upload_and_get_url' — upload a single local file and return its public download URL. " +
59
59
  "Note: For batch uploading files to share with users, prefer lightclaw_upload_file instead.",
60
60
  parameters: downloadToolSchema,
61
61
  async execute(_toolCallId, params) {
62
62
  // 每次 execute 时动态解析 apiKey(多 key 模式下通过 sessionKey 直接获取)
63
63
  const apiKey = resolveEffectiveApiKey({ sessionKey });
64
- log.warn(`[lightclaw_get_file_url] resolved apiKey="${apiKey?.slice(0, 8)}..."`);
64
+ // log.warn(`[lightclaw_get_file_url] resolved apiKey="${apiKey?.slice(0, 8)}..."`);
65
65
  const { action, filePath, localDir } = params;
66
66
  if (!filePath || typeof filePath !== "string") {
67
67
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"download-tool.js","sourceRoot":"","sources":["../../src/download-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-tool.js","sourceRoot":"","sources":["../../src/download-tool.ts"],"names":[],"mappings":"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"}