lightclawbot 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/data/scripts/manifest.json +5 -5
- package/dist/public/data/scripts/upgrade.211d7e4c.sh +266 -0
- package/dist/public/data/scripts/upgrade.sh +266 -0
- package/dist/src/config.d.ts +3 -3
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +4 -4
- 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.map +1 -1
- package/dist/src/download-tool.js +0 -3
- package/dist/src/download-tool.js.map +1 -1
- package/dist/src/gateway.d.ts.map +1 -1
- package/dist/src/gateway.js +64 -63
- 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.js +2 -2
- package/dist/src/inbound.js.map +1 -1
- 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/streaming/delta-tracker.d.ts +34 -0
- package/dist/src/streaming/delta-tracker.d.ts.map +1 -0
- package/dist/src/streaming/delta-tracker.js +145 -0
- package/dist/src/streaming/delta-tracker.js.map +1 -0
- package/dist/src/streaming/index.d.ts +12 -0
- package/dist/src/streaming/index.d.ts.map +1 -0
- package/dist/src/streaming/index.js +13 -0
- package/dist/src/streaming/index.js.map +1 -0
- package/dist/src/streaming/stream-reply-sink.d.ts +59 -0
- package/dist/src/streaming/stream-reply-sink.d.ts.map +1 -0
- package/dist/src/streaming/stream-reply-sink.js +293 -0
- package/dist/src/streaming/stream-reply-sink.js.map +1 -0
- package/dist/src/streaming/types.d.ts +45 -0
- package/dist/src/streaming/types.d.ts.map +1 -0
- package/dist/src/streaming/types.js +7 -0
- package/dist/src/streaming/types.js.map +1 -0
- package/dist/src/upload-tool.d.ts.map +1 -1
- package/dist/src/upload-tool.js +0 -3
- package/dist/src/upload-tool.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/data/scripts/preflight.78097a58.sh +0 -94
- package/dist/public/data/scripts/preflight.sh +0 -94
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/streaming/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-tool.d.ts","sourceRoot":"","sources":["../../src/upload-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AAS3E,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAY5B,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"upload-tool.d.ts","sourceRoot":"","sources":["../../src/upload-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AAS3E,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAY5B,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqI/D"}
|
package/dist/src/upload-tool.js
CHANGED
|
@@ -45,9 +45,6 @@ export function registerUploadTool(api) {
|
|
|
45
45
|
"Supports up to 5 files at once. Returns a public download URL for each uploaded file.",
|
|
46
46
|
parameters: uploadToolSchema,
|
|
47
47
|
async execute(_toolCallId, params) {
|
|
48
|
-
// 调试日志:打印原始 sessionKey,帮助排查多 key 模式下的 apiKey 选取
|
|
49
|
-
// 使用 warn 级别输出,确保终端可见
|
|
50
|
-
log.warn(`[lightclaw_upload_file] sessionKey="${sessionKey}", accountId="${defaultAccountId}"`);
|
|
51
48
|
// 每次 execute 时动态解析 apiKey(多 key 模式下通过 sessionKey 直接获取)
|
|
52
49
|
const apiKey = resolveEffectiveApiKey({ sessionKey });
|
|
53
50
|
log.warn(`[lightclaw_upload_file] resolved apiKey="${apiKey?.slice(0, 8)}..."`);
|
|
@@ -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,gGAAgG;gBAChG,iGAAiG;gBACjG,6FAA6F;gBAC7F,uFAAuF;YACzF,UAAU,EAAE,gBAAgB;YAE5B,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,MAA2B;gBAE3B,
|
|
1
|
+
{"version":3,"file":"upload-tool.js","sourceRoot":"","sources":["../../src/upload-tool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|
|
@@ -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
|