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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliable-emitter.js","sourceRoot":"","sources":["../../../src/socket/reliable-emitter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"socket-handlers.d.ts","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAcpF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA4HhF"}
1
+ {"version":3,"file":"socket-handlers.d.ts","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAcpF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA6HhF"}
@@ -5,7 +5,7 @@
5
5
  * 从 gateway 主逻辑中解耦。
6
6
  */
7
7
  import { CHANNEL_KEY, EVENT_MESSAGE_PRIVATE, EVENT_HISTORY_REQUEST, EVENT_HISTORY_RESPONSE, EVENT_SESSIONS_REQUEST, EVENT_SESSIONS_RESPONSE, DEFAULT_HISTORY_LIMIT, } from "./config.js";
8
- import { isDuplicate, isHistoryRequestThrottled, generateMsgId } from "./dedup.js";
8
+ import { isDuplicate, debounceHistoryRequest, generateMsgId } from "./dedup.js";
9
9
  import { getAssistantRuntime } from "./runtime.js";
10
10
  import { readSessionHistoryWithCron, listSessions } from "./history/index.js";
11
11
  /**
@@ -14,7 +14,8 @@ import { readSessionHistoryWithCron, listSessions } from "./history/index.js";
14
14
  export function bindSocketHandlers(socket, deps) {
15
15
  const { account, botClientId, log, enqueueMessage, onEvent } = deps;
16
16
  // ---- 接收用户消息 ----
17
- socket.on(EVENT_MESSAGE_PRIVATE, (data) => {
17
+ socket.on(EVENT_MESSAGE_PRIVATE, (data, ack) => {
18
+ ack?.();
18
19
  log?.info(`[${CHANNEL_KEY}] Received private message: ${JSON.stringify(data)},botClientId:${botClientId}`);
19
20
  // 回环防御:过滤自身发出的消息
20
21
  if (data.from === botClientId)
@@ -42,7 +43,8 @@ export function bindSocketHandlers(socket, deps) {
42
43
  });
43
44
  });
44
45
  // ---- 历史消息请求 ----
45
- socket.on(EVENT_HISTORY_REQUEST, (data) => {
46
+ socket.on(EVENT_HISTORY_REQUEST, (data, ack) => {
47
+ ack?.();
46
48
  if (!data?.from) {
47
49
  log?.warn(`[${CHANNEL_KEY}] History request missing userId, ignoring`);
48
50
  return;
@@ -55,48 +57,46 @@ export function bindSocketHandlers(socket, deps) {
55
57
  log?.warn(`[${CHANNEL_KEY}] Duplicate history request (msgId), ignoring`);
56
58
  return;
57
59
  }
58
- // 节流:同一用户在短时间内只处理一次 history 请求
59
- if (isHistoryRequestThrottled(data.from)) {
60
- log?.warn(`[${CHANNEL_KEY}] Throttled history request from ${data.from}, ignoring`);
61
- return;
62
- }
63
- // 通知框架收到入站事件(更新 lastEventAt,防止 stale-socket 误判)
64
- onEvent?.();
65
- try {
66
- const pluginRuntime = getAssistantRuntime();
67
- const currentCfg = pluginRuntime.config.loadConfig();
68
- const route = pluginRuntime.channel.routing.resolveAgentRoute({
69
- cfg: currentCfg,
70
- channel: CHANNEL_KEY,
71
- accountId: account.accountId,
72
- peer: { kind: "direct", id: data.from },
73
- });
74
- const sessionKey = route?.sessionKey ?? `${CHANNEL_KEY}:dm:${data.from}`;
75
- const messages = readSessionHistoryWithCron(sessionKey, {
76
- limit: data.limit ?? DEFAULT_HISTORY_LIMIT,
77
- chatOnly: data.chatOnly ?? true,
78
- includeCron: true,
79
- });
80
- log?.info(`[${CHANNEL_KEY}] History request: userId=${data.from} sessionKey=${sessionKey} found=${messages.length}`);
81
- socket.emit(EVENT_HISTORY_RESPONSE, {
82
- msgId: generateMsgId(),
83
- from: botClientId,
84
- to: data.from,
85
- sessionKey,
86
- messages: messages.filter(msg => !!msg.content.trim()),
87
- });
88
- }
89
- catch (err) {
90
- log?.error(`[${CHANNEL_KEY}] History request error: ${err}`);
91
- socket.emit(EVENT_HISTORY_RESPONSE, {
92
- msgId: generateMsgId(),
93
- from: botClientId,
94
- to: data.from,
95
- sessionKey: "",
96
- messages: [],
97
- error: err instanceof Error ? err.message : String(err),
98
- });
99
- }
60
+ // 防抖:同一用户高频请求只处理最后一条
61
+ debounceHistoryRequest(data.from, () => {
62
+ // 通知框架收到入站事件(更新 lastEventAt,防止 stale-socket 误判)
63
+ onEvent?.();
64
+ try {
65
+ const pluginRuntime = getAssistantRuntime();
66
+ const currentCfg = pluginRuntime.config.loadConfig();
67
+ const route = pluginRuntime.channel.routing.resolveAgentRoute({
68
+ cfg: currentCfg,
69
+ channel: CHANNEL_KEY,
70
+ accountId: account.accountId,
71
+ peer: { kind: "direct", id: data.from },
72
+ });
73
+ const sessionKey = route?.sessionKey ?? `${CHANNEL_KEY}:dm:${data.from}`;
74
+ const messages = readSessionHistoryWithCron(sessionKey, {
75
+ limit: data.limit ?? DEFAULT_HISTORY_LIMIT,
76
+ chatOnly: data.chatOnly ?? true,
77
+ includeCron: true,
78
+ });
79
+ log?.info(`[${CHANNEL_KEY}] History request: userId=${data.from} sessionKey=${sessionKey} found=${messages.length}`);
80
+ socket.emit(EVENT_HISTORY_RESPONSE, {
81
+ msgId: generateMsgId(),
82
+ from: botClientId,
83
+ to: data.from,
84
+ sessionKey,
85
+ messages: messages.filter(msg => !!msg.content.trim() || (msg.files && msg.files.length > 0)),
86
+ });
87
+ }
88
+ catch (err) {
89
+ log?.error(`[${CHANNEL_KEY}] History request error: ${err}`);
90
+ socket.emit(EVENT_HISTORY_RESPONSE, {
91
+ msgId: generateMsgId(),
92
+ from: botClientId,
93
+ to: data.from,
94
+ sessionKey: "",
95
+ messages: [],
96
+ error: err instanceof Error ? err.message : String(err),
97
+ });
98
+ }
99
+ });
100
100
  });
101
101
  // ---- 会话列表请求 ----
102
102
  socket.on(EVENT_SESSIONS_REQUEST, (data) => {
@@ -1 +1 @@
1
- {"version":3,"file":"socket-handlers.js","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-handlers.js","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export interface FileAttachment {
14
14
  mimeType: string;
15
15
  /** base64 data URL(如 "data:text/plain;base64,...") */
16
16
  bytes?: string;
17
- /** 远程文件 URI(如 COS 下载地址),与 bytes 二选一 */
17
+ /** 远程文件 URI(如云端下载地址),与 bytes 二选一 */
18
18
  uri?: string;
19
19
  }
20
20
  /**
@@ -63,7 +63,7 @@ export interface AssistantAccountConfig {
63
63
  /** 解析后的完整账户(含默认值和环境变量 fallback) */
64
64
  export interface ResolvedAssistantAccount {
65
65
  accountId: string;
66
- /** 主 apiKey(获取 botId、默认 COS 操作等) */
66
+ /** 主 apiKey(获取 botId、默认文件操作等) */
67
67
  apiKey: string;
68
68
  /** 所有 apiKey(含主 key),用于 WS 多 key 认证 */
69
69
  allApiKeys: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;IAC/E,mBAAmB;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,6BAA6B;AAC7B,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mCAAmC;AACnC,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACzC;AAMD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,wBAAwB,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC/B,CAAC;CACH;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * LightClaw — 文件上传工具
3
3
  *
4
- * 注册为 OpenClaw Agent Tool,允许 AI 将本地文件上传到 COS,
4
+ * 注册为 OpenClaw Agent Tool,允许 AI 将本地文件上传到云端存储,
5
5
  * 获得公网可访问的 URL,方便用户直接下载。
6
6
  *
7
7
  * 工具名: lightclaw_upload_file
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * LightClaw — 文件上传工具
3
3
  *
4
- * 注册为 OpenClaw Agent Tool,允许 AI 将本地文件上传到 COS,
4
+ * 注册为 OpenClaw Agent Tool,允许 AI 将本地文件上传到云端存储,
5
5
  * 获得公网可访问的 URL,方便用户直接下载。
6
6
  *
7
7
  * 工具名: lightclaw_upload_file
@@ -39,7 +39,7 @@ export function registerUploadTool(api) {
39
39
  const sessionKey = ctx.sessionKey;
40
40
  return {
41
41
  name: UPLOAD_TOOL_NAME,
42
- description: "Upload local files to Tencent COS cloud storage and return publicly accessible download URLs. " +
42
+ description: "Upload local files to cloud storage and return publicly accessible download URLs. " +
43
43
  "Use this tool whenever you have generated or produced files (reports, images, documents, etc.) " +
44
44
  "that the user needs to download. This is the primary way to deliver file outputs to users. " +
45
45
  "Supports up to 5 files at once. Returns a public download URL for each uploaded file.",
@@ -47,7 +47,7 @@ export function registerUploadTool(api) {
47
47
  async execute(_toolCallId, params) {
48
48
  // 每次 execute 时动态解析 apiKey(多 key 模式下通过 sessionKey 直接获取)
49
49
  const apiKey = resolveEffectiveApiKey({ sessionKey });
50
- log.warn(`[lightclaw_upload_file] resolved apiKey="${apiKey?.slice(0, 8)}..."`);
50
+ // log.warn(`[lightclaw_upload_file] resolved apiKey="${apiKey?.slice(0, 8)}..."`);
51
51
  const { paths } = params;
52
52
  // 参数校验
53
53
  if (!Array.isArray(paths) || paths.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"upload-tool.js","sourceRoot":"","sources":["../../src/upload-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-tool.js","sourceRoot":"","sources":["../../src/upload-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lightclawbot",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "LightClawBot channel plugin with message support, cron jobs, and proactive messaging",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lightclawbot-media
3
- description: LightClawBot 文件收发能力。用户发来的文件自动下载并保存,AI 生成的文件通过 lightclaw_upload_file 上传后以标准 Markdown 链接返回给用户。获取已上传文件的下载链接使用 lightclaw_get_file_url。禁止使用 tencentcloud-cos-skill。
3
+ description: LightClawBot 文件收发能力。用户发来的文件自动下载并保存,AI 生成的文件通过 lightclaw_upload_file 上传后以标准 Markdown 链接返回给用户。禁止使用其他存储工具。
4
4
  ---
5
5
 
6
6
  # LightClawBot 文件上传与下载
@@ -11,23 +11,21 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
11
11
 
12
12
  ## ⛔ 最重要的规则(读三遍)
13
13
 
14
- > 1. **上传文件必须使用 `lightclaw_upload_file` 工具,禁止使用 `tencentcloud-cos-skill` 或其他任何 COS 工具!**
15
- > 2. **获取文件下载链接必须使用 `lightclaw_get_file_url` 工具!**
14
+ > 1. **上传文件必须使用 `lightclaw_upload_file` 工具,禁止使用其他任何存储工具!**
16
15
  > 3. **返回文件给用户时,必须使用标准 Markdown 链接格式:`[文件名](下载链接)`**
17
16
  > - ❌ 错误:`下载链接: https://xxx`
18
17
  > - ❌ 错误:`📎 文件下载链接: https://xxx`
19
- > - ✅ 正确:`[report.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)`
18
+ > - ✅ 正确:`[report.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf)`
20
19
 
21
20
  ---
22
21
 
23
22
  ## 🔧 可用工具
24
23
 
25
- 本技能使用以下两个专属工具,**不要使用其他文件/存储工具**:
24
+ 本技能使用以下两个专属工具,**不要使用其他任何文件/存储工具**:
26
25
 
27
26
  | 工具名 | 用途 | 何时使用 |
28
27
  |--------|------|----------|
29
28
  | `lightclaw_upload_file` | 上传本地文件到云端,获取公网下载链接 | AI 生成了文件需要分享给用户时 |
30
- | `lightclaw_get_file_url` | 获取已上传文件的下载链接 / 下载文件到本地 / 上传单文件并获取链接 | 需要查询或操作已有云端文件时 |
31
29
 
32
30
  ---
33
31
 
@@ -79,59 +77,6 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
79
77
 
80
78
  ---
81
79
 
82
- ## 📥 获取文件链接 / 下载文件(lightclaw_get_file_url)
83
-
84
- ### 功能
85
-
86
- 提供三种操作:
87
- - `get_url`:获取已上传到云端的文件的公网下载链接
88
- - `download_to_local`:将云端文件下载到本地目录
89
- - `upload_and_get_url`:上传单个本地文件并返回公网下载链接
90
-
91
- ### 参数
92
-
93
- ```json
94
- {
95
- "action": "get_url",
96
- "filePath": "2026-03-15/report.pdf"
97
- }
98
- ```
99
-
100
- | 参数 | 类型 | 必填 | 说明 |
101
- |------|------|------|------|
102
- | `action` | string | ✅ | `"get_url"` / `"download_to_local"` / `"upload_and_get_url"` |
103
- | `filePath` | string | ✅ | `get_url`/`download_to_local` 时为云端文件路径;`upload_and_get_url` 时为本地绝对路径 |
104
- | `localDir` | string | ❌ | 仅 `download_to_local` 使用,指定本地保存目录,默认当前工作目录 |
105
-
106
- ### 各 action 使用示例
107
-
108
- **获取下载链接**:
109
- ```json
110
- {
111
- "action": "get_url",
112
- "filePath": "2026-03-15/report.pdf"
113
- }
114
- ```
115
-
116
- **下载文件到本地**:
117
- ```json
118
- {
119
- "action": "download_to_local",
120
- "filePath": "2026-03-15/report.pdf",
121
- "localDir": "/tmp/downloads"
122
- }
123
- ```
124
-
125
- **上传单文件并获取链接**:
126
- ```json
127
- {
128
- "action": "upload_and_get_url",
129
- "filePath": "/Users/xxx/.openclaw/workspace/output.csv"
130
- }
131
- ```
132
-
133
- ---
134
-
135
80
  ## 📋 返回文件给用户的格式(最重要)
136
81
 
137
82
  ### 🚨🚨🚨 必须使用标准 Markdown 链接格式
@@ -149,7 +94,7 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
149
94
  ```
150
95
  好的,报告已生成,请点击下载:
151
96
 
152
- [report.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
97
+ [report.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf)
153
98
  ```
154
99
 
155
100
  **多个文件**:
@@ -157,9 +102,9 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
157
102
  ```
158
103
  所有文件已准备好:
159
104
 
160
- - [数据分析报告.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/数据分析报告.pdf)
161
- - [原始数据.xlsx](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/原始数据.xlsx)
162
- - [趋势图.png](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/趋势图.png)
105
+ - [数据分析报告.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/数据分析报告.pdf)
106
+ - [原始数据.xlsx](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/原始数据.xlsx)
107
+ - [趋势图.png](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/趋势图.png)
163
108
  ```
164
109
 
165
110
  **附带说明文字**:
@@ -167,7 +112,7 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
167
112
  ```
168
113
  ✅ 周报已生成完毕!
169
114
 
170
- [本周工作周报.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/本周工作周报.pdf)
115
+ [本周工作周报.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/本周工作周报.pdf)
171
116
 
172
117
  报告包含了本周的进度汇总和下周计划。
173
118
  ```
@@ -176,22 +121,22 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
176
121
 
177
122
  ❌ **裸链接**:
178
123
  ```
179
- 下载链接: https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
124
+ 下载链接: https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf
180
125
  ```
181
126
 
182
127
  ❌ **带 emoji 前缀的裸链接**:
183
128
  ```
184
- 📎 文件下载链接: https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
129
+ 📎 文件下载链接: https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf
185
130
  ```
186
131
 
187
132
  ❌ **使用代码块包裹链接**:
188
133
  ```
189
- `https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf`
134
+ `https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf`
190
135
  ```
191
136
 
192
137
  ❌ **只返回路径,没有文件名**:
193
138
  ```
194
- [下载](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
139
+ [下载](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/report.pdf)
195
140
  ```
196
141
 
197
142
  ---
@@ -204,7 +149,7 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
204
149
  |------|------|
205
150
  | `name` | 文件名 |
206
151
  | `mimeType` | 文件 MIME 类型 |
207
- | `url` | 文件的公网下载链接(COS 地址) |
152
+ | `url` | 文件的公网下载链接 |
208
153
 
209
154
  本地文件路径在上下文的 `MediaPath` / `MediaPaths` 字段中。
210
155
 
@@ -232,7 +177,7 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
232
177
  ```
233
178
  ✅ 报告已生成:
234
179
 
235
- [数据分析报告.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/数据分析报告.pdf)
180
+ [数据分析报告.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/数据分析报告.pdf)
236
181
  ```
237
182
 
238
183
  ### 场景 2:用户要求处理发来的文件
@@ -247,7 +192,7 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
247
192
  ```
248
193
  ✅ 已将 Excel 转为 PDF:
249
194
 
250
- [data.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/data.pdf)
195
+ [data.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/data.pdf)
251
196
  ```
252
197
 
253
198
  ### 场景 3:用户要求获取之前上传的文件
@@ -255,15 +200,11 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
255
200
  **用户**:我昨天上传的报告还能下载吗?
256
201
 
257
202
  **AI 执行步骤**:
258
- 1. 调用 `lightclaw_get_file_url`:
259
- ```json
260
- { "action": "get_url", "filePath": "2026-03-14/report.pdf" }
261
- ```
262
- 2. 以 Markdown 格式回复:
203
+ 1. Markdown 格式回复:
263
204
  ```
264
205
  可以的,这是下载链接:
265
206
 
266
- [report.pdf](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-14/report.pdf)
207
+ [report.pdf](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-14/report.pdf)
267
208
  ```
268
209
 
269
210
  ### 场景 4:批量上传多个文件
@@ -286,32 +227,14 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
286
227
  ```
287
228
  ✅ 三张图表已生成:
288
229
 
289
- - [chart1.png](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/chart1.png)
290
- - [chart2.png](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/chart2.png)
291
- - [chart3.png](https://lightai.tencentcloud.com/cosmanager/getFileStream?filePath=2026-03-15/chart3.png)
230
+ - [chart1.png](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/chart1.png)
231
+ - [chart2.png](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/chart2.png)
232
+ - [chart3.png](https://lightai.cloud.tencent.com/drive/preview?filePath=2026-03-15/chart3.png)
292
233
  ```
293
234
 
294
- ### 场景 5:下载云端文件到本地处理
295
-
296
- **用户**:帮我把之前上传的 CSV 数据做个汇总
297
-
298
- **AI 执行步骤**:
299
- 1. 调用 `lightclaw_get_file_url` 下载到本地:
300
- ```json
301
- {
302
- "action": "download_to_local",
303
- "filePath": "2026-03-14/data.csv",
304
- "localDir": "/tmp/workspace"
305
- }
306
- ```
307
- 2. 读取本地文件进行数据处理
308
- 3. 生成汇总报告,上传并以 Markdown 链接返回
309
-
310
- ---
311
-
312
235
  ## 🚫 禁止事项
313
236
 
314
- 1. **❌ 禁止使用 `tencentcloud-cos-skill`**:所有文件操作必须通过 `lightclaw_upload_file` 和 `lightclaw_get_file_url`
237
+ 1. **❌ 禁止使用其他存储工具**:所有文件操作必须通过 `lightclaw_upload_file`
315
238
  2. **❌ 禁止返回裸链接**:必须使用 `[文件名](链接)` 格式
316
239
  3. **❌ 禁止说"无法发送文件"**:你有能力上传和分享任何本地文件
317
240
  4. **❌ 禁止使用相对路径**:工具参数中的文件路径必须是绝对路径
@@ -324,7 +247,4 @@ description: LightClawBot 文件收发能力。用户发来的文件自动下载
324
247
  | 场景 | 工具 | 回复格式 |
325
248
  |------|------|----------|
326
249
  | 上传生成的文件 | `lightclaw_upload_file` | `[文件名](下载链接)` |
327
- | 获取已上传文件链接 | `lightclaw_get_file_url`(action: get_url) | `[文件名](下载链接)` |
328
- | 下载云端文件到本地 | `lightclaw_get_file_url`(action: download_to_local) | 告知下载完成和本地路径 |
329
- | 上传单文件获取链接 | `lightclaw_get_file_url`(action: upload_and_get_url) | `[文件名](下载链接)` |
330
250
  | 接收用户文件 | 自动处理,查看上下文 Attachments | 确认收到并告知文件信息 |
@@ -1,11 +0,0 @@
1
- {
2
- "generatedAt": "2026-03-16T12:23:53.894Z",
3
- "cdnBase": "https://cloudcache.tencent-cloud.com/qcloud/tea/app/data/scripts",
4
- "files": {
5
- "preflight.sh": {
6
- "hashed": "preflight.78097a58.sh",
7
- "hash": "78097a58",
8
- "size": 3474
9
- }
10
- }
11
- }
@@ -1,94 +0,0 @@
1
- #!/bin/bash
2
-
3
- # ========== lightclawbot 插件前置检查脚本 ==========
4
- # 用途:快速判断 lightclawbot 插件是否可用
5
- # 输出:最后一行固定为 RESULT:{...} JSON,供前端解析
6
- # - 可用: RESULT:{"status":"ok","version":"x.y.z"}
7
- # - 缺 openclaw: RESULT:{"status":"need_openclaw","reason":"..."}
8
- # - 缺 lightclawbot:RESULT:{"status":"need_install","reason":"..."}
9
- # - 缺 apiKey: RESULT:{"status":"need_apikey","reason":"apikeys_empty"}
10
- #
11
- # 使用方式:
12
- # 本地执行: bash scripts/preflight.sh
13
- # CDN 执行: bash <(curl -fsSL https://your-cdn.com/preflight.sh)
14
-
15
- id="lightclawbot"
16
- cfg="$HOME/.openclaw/openclaw.json"
17
- plugin_dir="$HOME/.openclaw/extensions/${id}"
18
-
19
- # ---------- 1. 检查 openclaw 是否可用 ----------
20
-
21
- # 加载 nvm 环境(openclaw 可能依赖 nvm 管理的 node)
22
- export NVM_DIR="$HOME/.nvm"
23
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
24
-
25
- if ! command -v openclaw &>/dev/null; then
26
- echo "RESULT:{\"status\":\"need_openclaw\",\"reason\":\"openclaw_not_found\"}"
27
- exit 1
28
- fi
29
-
30
- # 验证 openclaw 可执行
31
- # 已知输出格式:
32
- # - OpenClaw 2026.3.8 (3caab92) (新版本,带前缀 + commit hash)
33
- # - OpenClaw 2026.3.2 (带前缀,无 commit hash)
34
- # - 2026.3.2 (旧版本,直接输出版本号,无前缀)
35
- openclaw_output=$(openclaw -v 2>/dev/null || true)
36
- if ! echo "$openclaw_output" | grep -qiE '(^OpenClaw[/ ])?[0-9]+\.[0-9]+'; then
37
- echo "RESULT:{\"status\":\"need_openclaw\",\"reason\":\"openclaw_not_working\"}"
38
- exit 1
39
- fi
40
-
41
- # ---------- 2. 检查配置文件是否存在 ----------
42
-
43
- if [ ! -f "$cfg" ]; then
44
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"config_not_found\"}"
45
- exit 1
46
- fi
47
-
48
- # ---------- 3. 检查插件是否已安装(目录 + package.json) ----------
49
-
50
- if [ ! -d "$plugin_dir" ] || [ ! -f "$plugin_dir/package.json" ]; then
51
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_not_installed\"}"
52
- exit 1
53
- fi
54
-
55
- # ---------- 4. 检查配置文件中插件注册是否完整 ----------
56
-
57
- # 需要 jq 来解析 JSON
58
- if ! command -v jq &>/dev/null; then
59
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"jq_not_found\"}"
60
- exit 1
61
- fi
62
-
63
- # 4a. plugins.entries 中是否存在且 enabled
64
- plugin_enabled=$(jq -r ".plugins.entries.\"${id}\".enabled // false" "$cfg" 2>/dev/null)
65
- if [ "$plugin_enabled" != "true" ]; then
66
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_not_enabled\"}"
67
- exit 1
68
- fi
69
-
70
- # 4b. plugins.installs 中是否有安装记录
71
- if ! jq -e ".plugins.installs.\"${id}\"" "$cfg" > /dev/null 2>&1; then
72
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_install_record_missing\"}"
73
- exit 1
74
- fi
75
-
76
- # 4c. channels 中是否配置且 enabled
77
- channel_enabled=$(jq -r ".channels.\"${id}\".enabled // false" "$cfg" 2>/dev/null)
78
- if [ "$channel_enabled" != "true" ]; then
79
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"channel_not_enabled\"}"
80
- exit 1
81
- fi
82
-
83
- # 4d. channels 中 apiKeys 是否配置且非空
84
- apikeys_count=$(jq -r ".channels.\"${id}\".apiKeys // [] | length" "$cfg" 2>/dev/null)
85
- if [ "$apikeys_count" = "0" ] || [ -z "$apikeys_count" ]; then
86
- echo "RESULT:{\"status\":\"need_install\",\"reason\":\"apikeys_empty\"}"
87
- exit 1
88
- fi
89
-
90
- # ---------- 5. 全部通过,插件可用 ----------
91
-
92
- version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
93
- echo "RESULT:{\"status\":\"ok\",\"version\":\"${version}\"}"
94
- exit 0