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.
- package/README.md +47 -213
- package/dist/src/config.d.ts +8 -8
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +9 -9
- package/dist/src/config.js.map +1 -1
- package/dist/src/dedup.d.ts +6 -1
- package/dist/src/dedup.d.ts.map +1 -1
- package/dist/src/dedup.js +27 -14
- package/dist/src/dedup.js.map +1 -1
- package/dist/src/download-tool.d.ts +1 -1
- package/dist/src/download-tool.js +9 -9
- package/dist/src/download-tool.js.map +1 -1
- package/dist/src/file-storage.d.ts +9 -9
- package/dist/src/file-storage.d.ts.map +1 -1
- package/dist/src/file-storage.js +10 -10
- package/dist/src/file-storage.js.map +1 -1
- package/dist/src/format-urls.d.ts +5 -5
- package/dist/src/format-urls.js +8 -8
- package/dist/src/format-urls.js.map +1 -1
- package/dist/src/gateway.d.ts.map +1 -1
- package/dist/src/gateway.js +11 -8
- package/dist/src/gateway.js.map +1 -1
- package/dist/src/history/text-processing.d.ts.map +1 -1
- package/dist/src/history/text-processing.js +2 -0
- package/dist/src/history/text-processing.js.map +1 -1
- package/dist/src/inbound.d.ts.map +1 -1
- package/dist/src/inbound.js +18 -19
- package/dist/src/inbound.js.map +1 -1
- package/dist/src/socket/handlers.d.ts +26 -0
- package/dist/src/socket/handlers.d.ts.map +1 -0
- package/dist/src/socket/handlers.js +130 -0
- package/dist/src/socket/handlers.js.map +1 -0
- package/dist/src/socket/index.d.ts +11 -0
- package/dist/src/socket/index.d.ts.map +1 -0
- package/dist/src/socket/index.js +9 -0
- package/dist/src/socket/index.js.map +1 -0
- package/dist/src/socket/registry.d.ts +59 -0
- package/dist/src/socket/registry.d.ts.map +1 -0
- package/dist/src/socket/registry.js +125 -0
- package/dist/src/socket/registry.js.map +1 -0
- package/dist/src/socket/reliable-emitter.d.ts +79 -0
- package/dist/src/socket/reliable-emitter.d.ts.map +1 -0
- package/dist/src/socket/reliable-emitter.js +213 -0
- package/dist/src/socket/reliable-emitter.js.map +1 -0
- package/dist/src/socket-handlers.d.ts.map +1 -1
- package/dist/src/socket-handlers.js +45 -45
- package/dist/src/socket-handlers.js.map +1 -1
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/upload-tool.d.ts +1 -1
- package/dist/src/upload-tool.js +3 -3
- package/dist/src/upload-tool.js.map +1 -1
- package/package.json +1 -1
- package/skills/lightclaw-media/SKILL.md +22 -102
- package/dist/public/data/scripts/manifest.json +0 -11
- package/dist/public/data/scripts/preflight.78097a58.sh +0 -94
- package/dist/public/data/scripts/preflight.sh +0 -94
- package/dist/src/session-history.d.ts +0 -88
- package/dist/src/session-history.d.ts.map +0 -1
- package/dist/src/session-history.js +0 -598
- 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,
|
|
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,
|
|
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
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"socket-handlers.js","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
66
|
+
/** 主 apiKey(获取 botId、默认文件操作等) */
|
|
67
67
|
apiKey: string;
|
|
68
68
|
/** 所有 apiKey(含主 key),用于 WS 多 key 认证 */
|
|
69
69
|
allApiKeys: string[];
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/upload-tool.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LightClaw — 文件上传工具
|
|
3
3
|
*
|
|
4
|
-
* 注册为 OpenClaw Agent Tool,允许 AI
|
|
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
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,8BAA8B;SAC5C;KACF;IACD,QAAQ,EAAE,CAAC,OAAO,CAAU;CAC7B,CAAC;AAEF,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D,MAAM,UAAU,kBAAkB,CAAC,GAAsB;IACvD,qCAAqC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IAEvB,GAAG,CAAC,YAAY,CACd,CAAC,GAAG,EAAE,EAAE;QACN,MAAM,gBAAgB,GAAG,GAAG,CAAC,cAAc,CAAC;QAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,
|
|
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-media
|
|
3
|
-
description: LightClawBot 文件收发能力。用户发来的文件自动下载并保存,AI 生成的文件通过 lightclaw_upload_file 上传后以标准 Markdown
|
|
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`
|
|
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.
|
|
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.
|
|
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.
|
|
161
|
-
- [原始数据.xlsx](https://lightai.
|
|
162
|
-
- [趋势图.png](https://lightai.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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` |
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
290
|
-
- [chart2.png](https://lightai.
|
|
291
|
-
- [chart3.png](https://lightai.
|
|
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. **❌
|
|
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,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
|