lightclawbot 1.0.4 → 1.0.5

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.
@@ -1,21 +1,11 @@
1
1
  {
2
- "generatedAt": "2026-03-16T03:41:55.361Z",
2
+ "generatedAt": "2026-03-16T12:23:53.894Z",
3
3
  "cdnBase": "https://cloudcache.tencent-cloud.com/qcloud/tea/app/data/scripts",
4
4
  "files": {
5
5
  "preflight.sh": {
6
- "hashed": "preflight.7c5a27cd.sh",
7
- "hash": "7c5a27cd",
8
- "size": 3105
9
- },
10
- "check-update.sh": {
11
- "hashed": "check-update.9c4e848e.sh",
12
- "hash": "9c4e848e",
13
- "size": 4422
14
- },
15
- "upgrade.sh": {
16
- "hashed": "upgrade.bd220b70.sh",
17
- "hash": "bd220b70",
18
- "size": 8398
6
+ "hashed": "preflight.78097a58.sh",
7
+ "hash": "78097a58",
8
+ "size": 3474
19
9
  }
20
10
  }
21
11
  }
@@ -6,6 +6,7 @@
6
6
  # - 可用: RESULT:{"status":"ok","version":"x.y.z"}
7
7
  # - 缺 openclaw: RESULT:{"status":"need_openclaw","reason":"..."}
8
8
  # - 缺 lightclawbot:RESULT:{"status":"need_install","reason":"..."}
9
+ # - 缺 apiKey: RESULT:{"status":"need_apikey","reason":"apikeys_empty"}
9
10
  #
10
11
  # 使用方式:
11
12
  # 本地执行: bash scripts/preflight.sh
@@ -79,6 +80,13 @@ if [ "$channel_enabled" != "true" ]; then
79
80
  exit 1
80
81
  fi
81
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
+
82
90
  # ---------- 5. 全部通过,插件可用 ----------
83
91
 
84
92
  version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
@@ -6,6 +6,7 @@
6
6
  # - 可用: RESULT:{"status":"ok","version":"x.y.z"}
7
7
  # - 缺 openclaw: RESULT:{"status":"need_openclaw","reason":"..."}
8
8
  # - 缺 lightclawbot:RESULT:{"status":"need_install","reason":"..."}
9
+ # - 缺 apiKey: RESULT:{"status":"need_apikey","reason":"apikeys_empty"}
9
10
  #
10
11
  # 使用方式:
11
12
  # 本地执行: bash scripts/preflight.sh
@@ -79,6 +80,13 @@ if [ "$channel_enabled" != "true" ]; then
79
80
  exit 1
80
81
  fi
81
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
+
82
90
  # ---------- 5. 全部通过,插件可用 ----------
83
91
 
84
92
  version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
@@ -19,13 +19,13 @@ import type { AssistantAccountConfig, ResolvedAssistantAccount } from "./types.j
19
19
  export declare const CHANNEL_KEY = "lightclawbot";
20
20
  export declare const DEFAULT_ACCOUNT_ID = "default";
21
21
  /** 核心服务域名 */
22
- export declare const DOMAIN = "lightai.intl.cloud.tencent.com";
22
+ export declare const DOMAIN = "lightai.cloud.tencent.com";
23
23
  /** WebSocket 连接地址 */
24
- export declare const WS_URL = "wss://lightai.intl.cloud.tencent.com";
24
+ export declare const WS_URL = "wss://lightai.cloud.tencent.com";
25
25
  /** HTTP API 基础地址 */
26
- export declare const API_BASE_URL = "https://lightai.intl.cloud.tencent.com";
26
+ export declare const API_BASE_URL = "https://lightai.cloud.tencent.com";
27
27
  /** COS 相关配置 */
28
- export declare const COS_BASE_URL = "https://lightai.intl.cloud.tencent.com";
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";
31
31
  /** Socket.IO 重连策略 */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAC1C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAU5C,aAAa;AACb,eAAO,MAAM,MAAM,mCAAmC,CAAC;AAEvD,qBAAqB;AACrB,eAAO,MAAM,MAAM,yCAAoB,CAAC;AACxC,oBAAoB;AACpB,eAAO,MAAM,YAAY,2CAAsB,CAAC;AAChD,eAAe;AACf,eAAO,MAAM,YAAY,2CAAsB,CAAC;AAMhD,qBAAqB;AACrB,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,qBAAqB;AACrB,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AACnD,eAAO,MAAM,4BAA4B,QAAW,CAAC;AAMrD,wCAAwC;AACxC,eAAO,MAAM,SAAS,YAAY,CAAC;AAEnC,qBAAqB;AACrB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvE;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAK1F;AAaD,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAGlF;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAqBT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqB/E;AAMD,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,iBAAiB;AACjB,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,iBAAiB;AACjB,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAM7D,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AACjE,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAM3D,oBAAoB;AACpB,eAAO,MAAM,aAAa,SAAU,CAAC;AACrC,mBAAmB;AACnB,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,sBAAsB;AACtB,eAAO,MAAM,eAAe,QAAmB,CAAC;AAMhD,eAAe;AACf,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,aAAa;AACb,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,iBAAiB;AACjB,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAMvC,mBAAmB;AACnB,eAAO,MAAM,SAAS,QAAiB,CAAC;AACxC,kBAAkB;AAClB,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,kBAAkB;AAClB,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAM9C,4DAA4D;AAC5D,eAAO,MAAM,yBAAyB,QAAc,CAAC;AACrD,yBAAyB;AACzB,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,iBAAiB;AACjB,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAe;AACf,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAOrC,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAmB5D;AAED,aAAa;AACb,wBAAgB,cAAc,CAC5B,GAAG,EAAE,cAAc,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,wBAAwB,CA4C1B;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE7D;AAED,yBAAyB;AACzB,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACvC,cAAc,CAgBhB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ const ENV_API_BASE_URL = "LIGHTCLAW_API_BASE_URL";
23
23
  // 域名 & URL 配置
24
24
  // ============================================================
25
25
  /** 核心服务域名 */
26
- export const DOMAIN = "lightai.intl.cloud.tencent.com";
26
+ export const DOMAIN = "lightai.cloud.tencent.com";
27
27
  /** WebSocket 连接地址 */
28
28
  export const WS_URL = `wss://${DOMAIN}`;
29
29
  /** HTTP API 基础地址 */
@@ -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,8 +2,8 @@
2
2
  * LightClaw — COS URL 格式化
3
3
  *
4
4
  * 将消息文本中的裸 COS 下载链接自动转换为 Markdown 链接格式:
5
- * 裸链接: https://lightai.intl.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
6
- * Markdown: [report.pdf](https://lightai.intl.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
5
+ * 裸链接: https://lightai.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
6
+ * Markdown: [report.pdf](https://lightai.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
7
7
  *
8
8
  * 使用场景:
9
9
  * 1. gateway.ts sendReply / sendFiles — 兜底确保最终发出去的消息格式正确
@@ -2,8 +2,8 @@
2
2
  * LightClaw — COS URL 格式化
3
3
  *
4
4
  * 将消息文本中的裸 COS 下载链接自动转换为 Markdown 链接格式:
5
- * 裸链接: https://lightai.intl.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
6
- * Markdown: [report.pdf](https://lightai.intl.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
5
+ * 裸链接: https://lightai.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf
6
+ * Markdown: [report.pdf](https://lightai.cloud.tencent.com/cosmanager/getFileStream?filePath=2026-03-15/report.pdf)
7
7
  *
8
8
  * 使用场景:
9
9
  * 1. gateway.ts sendReply / sendFiles — 兜底确保最终发出去的消息格式正确
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lightclawbot",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
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,138 +0,0 @@
1
- #!/bin/bash
2
-
3
- # ========== lightclawbot 插件升级检查脚本 ==========
4
- # 用途:检查 lightclawbot 插件是否需要升级(只检查,不执行安装)
5
- # 输出:最后一行固定为 RESULT:{...} JSON,供前端解析
6
- #
7
- # 状态说明:
8
- # - 已是最新: RESULT:{"status":"up_to_date","local":"x.y.z","remote":"x.y.z"}
9
- # - 需要升级: RESULT:{"status":"update_available","local":"x.y.z","remote":"x.y.z"}
10
- # - 未安装: RESULT:{"status":"not_installed","remote":"x.y.z"}
11
- # - 无法检查: RESULT:{"status":"error","error":"...","detail":"..."}
12
- #
13
- # 使用方式:
14
- # 本地执行: bash scripts/check-update.sh
15
- # CDN 执行: bash <(curl -fsSL https://your-cdn.com/check-update.sh)
16
- #
17
- # 环境变量:
18
- # NPM_REGISTRY — npm 源地址(默认腾讯镜像)
19
- # TIMEOUT — npm view 超时秒数(默认 10)
20
-
21
- set -euo pipefail
22
-
23
- # ========== 配置 ==========
24
-
25
- NPM_REGISTRY="${NPM_REGISTRY:-https://mirrors.tencent.com/npm/}"
26
- TIMEOUT="${TIMEOUT:-10}"
27
-
28
- id="lightclawbot"
29
- spec="lightclawbot"
30
- plugin_dir="$HOME/.openclaw/extensions/${id}"
31
-
32
- # ========== 环境加载 ==========
33
-
34
- load_env() {
35
- export NVM_DIR="$HOME/.nvm"
36
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
37
-
38
- if [ -z "${PNPM_HOME:-}" ] && [ -d "$HOME/.local/share/pnpm" ]; then
39
- export PNPM_HOME="$HOME/.local/share/pnpm"
40
- export PATH="$PNPM_HOME:$PATH"
41
- fi
42
- }
43
-
44
- load_env
45
-
46
- # ========== 工具函数 ==========
47
-
48
- # semver 比较:left < right 返回 0,否则返回 1,解析失败返回 2
49
- version_lt() {
50
- local left="$1"
51
- local right="$2"
52
- VERSION_LEFT="$left" VERSION_RIGHT="$right" node - <<'NODE'
53
- function parseSemver(value) {
54
- const match = String(value || "").trim().match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
55
- if (!match) return null;
56
- return [Number(match[1]), Number(match[2]), Number(match[3])];
57
- }
58
- const left = parseSemver(process.env.VERSION_LEFT);
59
- const right = parseSemver(process.env.VERSION_RIGHT);
60
- if (!left || !right) process.exit(2);
61
- for (let i = 0; i < 3; i++) {
62
- if (left[i] < right[i]) process.exit(0);
63
- if (left[i] > right[i]) process.exit(1);
64
- }
65
- process.exit(1);
66
- NODE
67
- }
68
-
69
- # ========== 1. 检查前置依赖 ==========
70
-
71
- if ! command -v npm &>/dev/null; then
72
- echo "RESULT:{\"status\":\"error\",\"error\":\"missing_dependency\",\"detail\":\"npm not found\"}"
73
- exit 1
74
- fi
75
-
76
- # ========== 2. 获取本地版本 ==========
77
-
78
- local_version=""
79
- if [ -d "$plugin_dir" ] && [ -f "$plugin_dir/package.json" ]; then
80
- if command -v jq &>/dev/null; then
81
- local_version=$(jq -r '.version // ""' "$plugin_dir/package.json" 2>/dev/null || true)
82
- elif command -v node &>/dev/null; then
83
- local_version=$(node -e "
84
- try {
85
- const p = require('$plugin_dir/package.json');
86
- process.stdout.write(p.version || '');
87
- } catch {}
88
- " 2>/dev/null || true)
89
- fi
90
- fi
91
-
92
- # ========== 3. 查询远程最新版本 ==========
93
-
94
- remote_version=""
95
-
96
- # 尝试腾讯镜像源
97
- remote_version=$(timeout "$TIMEOUT" npm view "$spec" version --registry "$NPM_REGISTRY" 2>/dev/null || true)
98
-
99
- # 回退到官方源
100
- if [ -z "$remote_version" ]; then
101
- remote_version=$(timeout "$TIMEOUT" npm view "$spec" version --registry https://registry.npmjs.org 2>/dev/null || true)
102
- fi
103
-
104
- if [ -z "$remote_version" ]; then
105
- echo "RESULT:{\"status\":\"error\",\"error\":\"fetch_failed\",\"detail\":\"could not fetch remote version from any registry\"}"
106
- exit 1
107
- fi
108
-
109
- # ========== 4. 比较版本 ==========
110
-
111
- # 未安装
112
- if [ -z "$local_version" ]; then
113
- echo "RESULT:{\"status\":\"not_installed\",\"remote\":\"${remote_version}\"}"
114
- exit 0
115
- fi
116
-
117
- # 版本相同
118
- if [ "$local_version" = "$remote_version" ]; then
119
- echo "RESULT:{\"status\":\"up_to_date\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
120
- exit 0
121
- fi
122
-
123
- # semver 比较(需要 node)
124
- if command -v node &>/dev/null; then
125
- if version_lt "$local_version" "$remote_version"; then
126
- # local < remote → 需要升级
127
- echo "RESULT:{\"status\":\"update_available\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
128
- exit 0
129
- else
130
- # local >= remote(可能是开发版本或降级场景)
131
- echo "RESULT:{\"status\":\"up_to_date\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
132
- exit 0
133
- fi
134
- fi
135
-
136
- # 没有 node,只能做字符串不等判断
137
- echo "RESULT:{\"status\":\"update_available\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
138
- exit 0
@@ -1,138 +0,0 @@
1
- #!/bin/bash
2
-
3
- # ========== lightclawbot 插件升级检查脚本 ==========
4
- # 用途:检查 lightclawbot 插件是否需要升级(只检查,不执行安装)
5
- # 输出:最后一行固定为 RESULT:{...} JSON,供前端解析
6
- #
7
- # 状态说明:
8
- # - 已是最新: RESULT:{"status":"up_to_date","local":"x.y.z","remote":"x.y.z"}
9
- # - 需要升级: RESULT:{"status":"update_available","local":"x.y.z","remote":"x.y.z"}
10
- # - 未安装: RESULT:{"status":"not_installed","remote":"x.y.z"}
11
- # - 无法检查: RESULT:{"status":"error","error":"...","detail":"..."}
12
- #
13
- # 使用方式:
14
- # 本地执行: bash scripts/check-update.sh
15
- # CDN 执行: bash <(curl -fsSL https://your-cdn.com/check-update.sh)
16
- #
17
- # 环境变量:
18
- # NPM_REGISTRY — npm 源地址(默认腾讯镜像)
19
- # TIMEOUT — npm view 超时秒数(默认 10)
20
-
21
- set -euo pipefail
22
-
23
- # ========== 配置 ==========
24
-
25
- NPM_REGISTRY="${NPM_REGISTRY:-https://mirrors.tencent.com/npm/}"
26
- TIMEOUT="${TIMEOUT:-10}"
27
-
28
- id="lightclawbot"
29
- spec="lightclawbot"
30
- plugin_dir="$HOME/.openclaw/extensions/${id}"
31
-
32
- # ========== 环境加载 ==========
33
-
34
- load_env() {
35
- export NVM_DIR="$HOME/.nvm"
36
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
37
-
38
- if [ -z "${PNPM_HOME:-}" ] && [ -d "$HOME/.local/share/pnpm" ]; then
39
- export PNPM_HOME="$HOME/.local/share/pnpm"
40
- export PATH="$PNPM_HOME:$PATH"
41
- fi
42
- }
43
-
44
- load_env
45
-
46
- # ========== 工具函数 ==========
47
-
48
- # semver 比较:left < right 返回 0,否则返回 1,解析失败返回 2
49
- version_lt() {
50
- local left="$1"
51
- local right="$2"
52
- VERSION_LEFT="$left" VERSION_RIGHT="$right" node - <<'NODE'
53
- function parseSemver(value) {
54
- const match = String(value || "").trim().match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
55
- if (!match) return null;
56
- return [Number(match[1]), Number(match[2]), Number(match[3])];
57
- }
58
- const left = parseSemver(process.env.VERSION_LEFT);
59
- const right = parseSemver(process.env.VERSION_RIGHT);
60
- if (!left || !right) process.exit(2);
61
- for (let i = 0; i < 3; i++) {
62
- if (left[i] < right[i]) process.exit(0);
63
- if (left[i] > right[i]) process.exit(1);
64
- }
65
- process.exit(1);
66
- NODE
67
- }
68
-
69
- # ========== 1. 检查前置依赖 ==========
70
-
71
- if ! command -v npm &>/dev/null; then
72
- echo "RESULT:{\"status\":\"error\",\"error\":\"missing_dependency\",\"detail\":\"npm not found\"}"
73
- exit 1
74
- fi
75
-
76
- # ========== 2. 获取本地版本 ==========
77
-
78
- local_version=""
79
- if [ -d "$plugin_dir" ] && [ -f "$plugin_dir/package.json" ]; then
80
- if command -v jq &>/dev/null; then
81
- local_version=$(jq -r '.version // ""' "$plugin_dir/package.json" 2>/dev/null || true)
82
- elif command -v node &>/dev/null; then
83
- local_version=$(node -e "
84
- try {
85
- const p = require('$plugin_dir/package.json');
86
- process.stdout.write(p.version || '');
87
- } catch {}
88
- " 2>/dev/null || true)
89
- fi
90
- fi
91
-
92
- # ========== 3. 查询远程最新版本 ==========
93
-
94
- remote_version=""
95
-
96
- # 尝试腾讯镜像源
97
- remote_version=$(timeout "$TIMEOUT" npm view "$spec" version --registry "$NPM_REGISTRY" 2>/dev/null || true)
98
-
99
- # 回退到官方源
100
- if [ -z "$remote_version" ]; then
101
- remote_version=$(timeout "$TIMEOUT" npm view "$spec" version --registry https://registry.npmjs.org 2>/dev/null || true)
102
- fi
103
-
104
- if [ -z "$remote_version" ]; then
105
- echo "RESULT:{\"status\":\"error\",\"error\":\"fetch_failed\",\"detail\":\"could not fetch remote version from any registry\"}"
106
- exit 1
107
- fi
108
-
109
- # ========== 4. 比较版本 ==========
110
-
111
- # 未安装
112
- if [ -z "$local_version" ]; then
113
- echo "RESULT:{\"status\":\"not_installed\",\"remote\":\"${remote_version}\"}"
114
- exit 0
115
- fi
116
-
117
- # 版本相同
118
- if [ "$local_version" = "$remote_version" ]; then
119
- echo "RESULT:{\"status\":\"up_to_date\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
120
- exit 0
121
- fi
122
-
123
- # semver 比较(需要 node)
124
- if command -v node &>/dev/null; then
125
- if version_lt "$local_version" "$remote_version"; then
126
- # local < remote → 需要升级
127
- echo "RESULT:{\"status\":\"update_available\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
128
- exit 0
129
- else
130
- # local >= remote(可能是开发版本或降级场景)
131
- echo "RESULT:{\"status\":\"up_to_date\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
132
- exit 0
133
- fi
134
- fi
135
-
136
- # 没有 node,只能做字符串不等判断
137
- echo "RESULT:{\"status\":\"update_available\",\"local\":\"${local_version}\",\"remote\":\"${remote_version}\"}"
138
- exit 0
@@ -1,214 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # ========== lightclawbot 插件快速安装/升级脚本 ==========
5
- # 用途:跳过 openclaw plugins install 的慢路径,直接安装/升级 lightclawbot 插件
6
- # 前提:openclaw 已安装且可用,npm/pnpm/jq 已安装
7
- # 支持:首次安装 / 重装 / 升级,自动保留已有的 channels 配置
8
- #
9
- # 使用方式:
10
- # 本地执行: bash scripts/upgrade.sh
11
- # CDN 执行: bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
12
- # 传入参数: APIKEY="sk-xxx" bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
13
-
14
- echo "=== lightclawbot Plugin Installer / Upgrader ==="
15
-
16
- # ========== 配置(支持环境变量覆盖) ==========
17
-
18
- # npm 源:使用腾讯镜像源(可通过 NPM_REGISTRY 环境变量覆盖)
19
- NPM_REGISTRY="${NPM_REGISTRY:-https://mirrors.tencent.com/npm/}"
20
-
21
- # API Key:优先读取环境变量,为空则保留配置文件中已有的值
22
- # 用法:APIKEY="sk-xxx" bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
23
- APIKEY="${APIKEY:-}"
24
-
25
- # ========== 环境加载 ==========
26
-
27
- load_env() {
28
- export NVM_DIR="$HOME/.nvm"
29
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
30
-
31
- if [ -z "$PNPM_HOME" ] && [ -d "$HOME/.local/share/pnpm" ]; then
32
- export PNPM_HOME="$HOME/.local/share/pnpm"
33
- export PATH="$PNPM_HOME:$PATH"
34
- fi
35
-
36
- if [ ! -t 1 ]; then
37
- export CI=true
38
- fi
39
- }
40
-
41
- load_env
42
-
43
- # 验证前置依赖
44
- for cmd in npm jq openclaw; do
45
- if ! command -v "$cmd" &>/dev/null; then
46
- echo "Error: $cmd not found. Please install it first."
47
- echo "RESULT:{\"status\":\"error\",\"error\":\"missing_dependency\",\"detail\":\"$cmd not found\"}"
48
- exit 1
49
- fi
50
- done
51
-
52
- # ========== 安装 / 升级 lightclawbot ==========
53
-
54
- SCRIPT_START=$SECONDS
55
-
56
- cfg="$HOME/.openclaw/openclaw.json"
57
- id="lightclawbot"
58
- spec="lightclawbot"
59
- plugin_dir="$HOME/.openclaw/extensions/${id}"
60
-
61
- # ---------- 检查是否已安装,获取本地版本 ----------
62
- local_version=""
63
- if [ -d "$plugin_dir" ] && [ -f "$plugin_dir/package.json" ]; then
64
- local_version=$(jq -r '.version // ""' "$plugin_dir/package.json")
65
- fi
66
-
67
- # ---------- 查询远程最新版本 ----------
68
- echo "Checking latest version from registry..."
69
- remote_version=$(npm view "$spec" version --registry "$NPM_REGISTRY" 2>/dev/null || true)
70
-
71
- if [ -z "$remote_version" ]; then
72
- echo "Tencent mirror failed, retrying with official registry..."
73
- remote_version=$(npm view "$spec" version --registry https://registry.npmjs.org 2>/dev/null || true)
74
- fi
75
-
76
- if [ -z "$remote_version" ]; then
77
- echo "Warning: Could not fetch remote version, will proceed with install anyway"
78
- fi
79
-
80
- # ---------- 判断安装模式 ----------
81
- install_mode="install"
82
- if [ -n "$local_version" ]; then
83
- if [ -n "$remote_version" ] && [ "$local_version" = "$remote_version" ]; then
84
- install_mode="up-to-date"
85
- else
86
- install_mode="upgrade"
87
- fi
88
- fi
89
-
90
- if [ "$install_mode" = "up-to-date" ]; then
91
- echo "Plugin $id@$local_version is already up-to-date"
92
- echo "Checking and updating configuration..."
93
- # 即使版本一致,也要确保配置正确(后面会更新配置)
94
- else
95
- if [ "$install_mode" = "upgrade" ]; then
96
- echo "Upgrading $id: $local_version -> ${remote_version:-latest}"
97
- else
98
- echo "Installing $id for the first time..."
99
- fi
100
-
101
- # ---------- 清理旧版本 ----------
102
- echo "Cleaning up old installation..."
103
- rm -rf "$plugin_dir"
104
-
105
- # ---------- npm pack 下载 tgz ----------
106
- tmp_dir=$(mktemp -d /tmp/openclaw-plugin-XXXXXX)
107
- echo "Downloading $spec from Tencent mirror..."
108
-
109
- tgz_file=$(cd "$tmp_dir" && npm pack "$spec" --registry "$NPM_REGISTRY" 2>/dev/null | tail -n1)
110
- if [ -z "$tgz_file" ] || [ ! -f "$tmp_dir/$tgz_file" ]; then
111
- echo "Tencent mirror failed, retrying with official registry..."
112
- tgz_file=$(cd "$tmp_dir" && npm pack "$spec" --registry https://registry.npmjs.org 2>/dev/null | tail -n1)
113
- fi
114
- if [ -z "$tgz_file" ] || [ ! -f "$tmp_dir/$tgz_file" ]; then
115
- echo "Error: failed to download $spec"
116
- echo "RESULT:{\"status\":\"error\",\"error\":\"download_failed\",\"detail\":\"failed to download $spec\"}"
117
- rm -rf "$tmp_dir"
118
- exit 1
119
- fi
120
-
121
- # ---------- 解压到插件目录 ----------
122
- mkdir -p "$plugin_dir"
123
- tar -xzf "$tmp_dir/$tgz_file" -C "$plugin_dir" --strip-components=1
124
- rm -rf "$tmp_dir"
125
-
126
- # ---------- 安装生产依赖 ----------
127
- # lightclawbot 声明了 bundledDependencies,npm pack 产出的 tgz 已包含所有依赖
128
- has_unbundled_deps=false
129
- if jq -e '.dependencies | length > 0' "$plugin_dir/package.json" > /dev/null 2>&1; then
130
- bundled_count=$(jq -r '.bundledDependencies // .bundleDependencies // [] | length' "$plugin_dir/package.json")
131
- dep_count=$(jq -r '.dependencies | length' "$plugin_dir/package.json")
132
- if [ "$bundled_count" -lt "$dep_count" ]; then
133
- has_unbundled_deps=true
134
- fi
135
- fi
136
-
137
- if [ "$has_unbundled_deps" = true ]; then
138
- echo "Installing dependencies for $id..."
139
- (cd "$plugin_dir" && CI=true pnpm install --prod)
140
- else
141
- echo "All dependencies bundled for $id, skipping dependency install"
142
- fi
143
- fi
144
-
145
- # ========== 更新配置文件 ==========
146
-
147
- version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
148
-
149
- if [ -f "$cfg" ]; then
150
- echo "Updating configuration..."
151
-
152
- # 1) 基础配置:plugins.entries + plugins.installs
153
- jq ".plugins.entries.\"${id}\" = {\"enabled\": true} | .plugins.installs.\"${id}\" = {\"source\": \"npm\", \"spec\": \"${spec}\", \"installPath\": \"${plugin_dir}\", \"version\": \"${version}\", \"installedAt\": \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\"}" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
154
-
155
- # 2) 确保插件在 allow 白名单中
156
- if ! jq -e ".plugins.allow // [] | index(\"${id}\")" "$cfg" > /dev/null 2>&1; then
157
- jq ".plugins.allow = ((.plugins.allow // []) + [\"${id}\"])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
158
- fi
159
-
160
- # 3) channel 配置:智能合并,迁移 apiKey -> apiKeys(新版本只需要 apiKeys)
161
- echo "Updating channel configuration for $id..."
162
-
163
- # 读取现有的 channel 配置
164
- existing_apikey=$(jq -r ".channels.\"${id}\".apiKey // \"\"" "$cfg" 2>/dev/null || echo "")
165
- existing_apikeys=$(jq -c ".channels.\"${id}\".apiKeys // []" "$cfg" 2>/dev/null || echo "[]")
166
-
167
- # 确保 channel 基础配置存在(enabled=true),并删除旧的 apiKey 字段
168
- jq ".channels.\"${id}\" = ((.channels.\"${id}\" // {}) + {\"enabled\": true}) | del(.channels.\"${id}\".apiKey)" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
169
-
170
- # 迁移:如果存在旧的 apiKey,将其加入 apiKeys 数组(去重)
171
- if [ -n "$existing_apikey" ]; then
172
- apikey_in_array=$(echo "$existing_apikeys" | jq --arg k "$existing_apikey" 'index($k)')
173
- if [ "$apikey_in_array" = "null" ]; then
174
- echo "Migrating existing apiKey to apiKeys array..."
175
- jq --arg k "$existing_apikey" ".channels.\"${id}\".apiKeys = ((.channels.\"${id}\".apiKeys // []) + [\$k])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
176
- else
177
- echo "Existing apiKey already in apiKeys array, skipping migration"
178
- fi
179
- fi
180
-
181
- # 如果通过环境变量传入了 APIKEY,确保它在 apiKeys 数组中(去重)
182
- if [ -n "$APIKEY" ]; then
183
- apikey_exists=$(jq -r --arg k "$APIKEY" ".channels.\"${id}\".apiKeys // [] | index(\$k)" "$cfg" 2>/dev/null || echo "null")
184
- if [ "$apikey_exists" = "null" ]; then
185
- echo "Adding APIKEY to apiKeys array..."
186
- jq --arg k "$APIKEY" ".channels.\"${id}\".apiKeys = ((.channels.\"${id}\".apiKeys // []) + [\$k])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
187
- else
188
- echo "APIKEY already exists in apiKeys array"
189
- fi
190
- fi
191
-
192
- # 确保 apiKeys 字段至少存在(即使为空数组)
193
- jq ".channels.\"${id}\".apiKeys //= []" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
194
-
195
- echo "Channel configuration updated successfully"
196
- fi
197
-
198
- # ========== 重启 Gateway ==========
199
-
200
- echo "Restarting openclaw gateway..."
201
- openclaw gateway restart >/dev/null 2>&1 || true
202
-
203
- elapsed=$((SECONDS - SCRIPT_START))
204
- echo ""
205
- if [ "$install_mode" = "up-to-date" ]; then
206
- echo "=== Plugin $id@$version config refreshed in ${elapsed}s ==="
207
- elif [ "$install_mode" = "upgrade" ]; then
208
- echo "=== Plugin $id upgraded to $version in ${elapsed}s ==="
209
- else
210
- echo "=== Plugin $id@$version installed in ${elapsed}s ==="
211
- fi
212
-
213
- # 结构化结果行,供前端程序解析(固定前缀 RESULT:)
214
- echo "RESULT:{\"status\":\"success\",\"mode\":\"${install_mode}\",\"version\":\"${version}\",\"elapsed\":${elapsed}}"
@@ -1,214 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # ========== lightclawbot 插件快速安装/升级脚本 ==========
5
- # 用途:跳过 openclaw plugins install 的慢路径,直接安装/升级 lightclawbot 插件
6
- # 前提:openclaw 已安装且可用,npm/pnpm/jq 已安装
7
- # 支持:首次安装 / 重装 / 升级,自动保留已有的 channels 配置
8
- #
9
- # 使用方式:
10
- # 本地执行: bash scripts/upgrade.sh
11
- # CDN 执行: bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
12
- # 传入参数: APIKEY="sk-xxx" bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
13
-
14
- echo "=== lightclawbot Plugin Installer / Upgrader ==="
15
-
16
- # ========== 配置(支持环境变量覆盖) ==========
17
-
18
- # npm 源:使用腾讯镜像源(可通过 NPM_REGISTRY 环境变量覆盖)
19
- NPM_REGISTRY="${NPM_REGISTRY:-https://mirrors.tencent.com/npm/}"
20
-
21
- # API Key:优先读取环境变量,为空则保留配置文件中已有的值
22
- # 用法:APIKEY="sk-xxx" bash <(curl -fsSL https://your-cdn.com/upgrade.sh)
23
- APIKEY="${APIKEY:-}"
24
-
25
- # ========== 环境加载 ==========
26
-
27
- load_env() {
28
- export NVM_DIR="$HOME/.nvm"
29
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
30
-
31
- if [ -z "$PNPM_HOME" ] && [ -d "$HOME/.local/share/pnpm" ]; then
32
- export PNPM_HOME="$HOME/.local/share/pnpm"
33
- export PATH="$PNPM_HOME:$PATH"
34
- fi
35
-
36
- if [ ! -t 1 ]; then
37
- export CI=true
38
- fi
39
- }
40
-
41
- load_env
42
-
43
- # 验证前置依赖
44
- for cmd in npm jq openclaw; do
45
- if ! command -v "$cmd" &>/dev/null; then
46
- echo "Error: $cmd not found. Please install it first."
47
- echo "RESULT:{\"status\":\"error\",\"error\":\"missing_dependency\",\"detail\":\"$cmd not found\"}"
48
- exit 1
49
- fi
50
- done
51
-
52
- # ========== 安装 / 升级 lightclawbot ==========
53
-
54
- SCRIPT_START=$SECONDS
55
-
56
- cfg="$HOME/.openclaw/openclaw.json"
57
- id="lightclawbot"
58
- spec="lightclawbot"
59
- plugin_dir="$HOME/.openclaw/extensions/${id}"
60
-
61
- # ---------- 检查是否已安装,获取本地版本 ----------
62
- local_version=""
63
- if [ -d "$plugin_dir" ] && [ -f "$plugin_dir/package.json" ]; then
64
- local_version=$(jq -r '.version // ""' "$plugin_dir/package.json")
65
- fi
66
-
67
- # ---------- 查询远程最新版本 ----------
68
- echo "Checking latest version from registry..."
69
- remote_version=$(npm view "$spec" version --registry "$NPM_REGISTRY" 2>/dev/null || true)
70
-
71
- if [ -z "$remote_version" ]; then
72
- echo "Tencent mirror failed, retrying with official registry..."
73
- remote_version=$(npm view "$spec" version --registry https://registry.npmjs.org 2>/dev/null || true)
74
- fi
75
-
76
- if [ -z "$remote_version" ]; then
77
- echo "Warning: Could not fetch remote version, will proceed with install anyway"
78
- fi
79
-
80
- # ---------- 判断安装模式 ----------
81
- install_mode="install"
82
- if [ -n "$local_version" ]; then
83
- if [ -n "$remote_version" ] && [ "$local_version" = "$remote_version" ]; then
84
- install_mode="up-to-date"
85
- else
86
- install_mode="upgrade"
87
- fi
88
- fi
89
-
90
- if [ "$install_mode" = "up-to-date" ]; then
91
- echo "Plugin $id@$local_version is already up-to-date"
92
- echo "Checking and updating configuration..."
93
- # 即使版本一致,也要确保配置正确(后面会更新配置)
94
- else
95
- if [ "$install_mode" = "upgrade" ]; then
96
- echo "Upgrading $id: $local_version -> ${remote_version:-latest}"
97
- else
98
- echo "Installing $id for the first time..."
99
- fi
100
-
101
- # ---------- 清理旧版本 ----------
102
- echo "Cleaning up old installation..."
103
- rm -rf "$plugin_dir"
104
-
105
- # ---------- npm pack 下载 tgz ----------
106
- tmp_dir=$(mktemp -d /tmp/openclaw-plugin-XXXXXX)
107
- echo "Downloading $spec from Tencent mirror..."
108
-
109
- tgz_file=$(cd "$tmp_dir" && npm pack "$spec" --registry "$NPM_REGISTRY" 2>/dev/null | tail -n1)
110
- if [ -z "$tgz_file" ] || [ ! -f "$tmp_dir/$tgz_file" ]; then
111
- echo "Tencent mirror failed, retrying with official registry..."
112
- tgz_file=$(cd "$tmp_dir" && npm pack "$spec" --registry https://registry.npmjs.org 2>/dev/null | tail -n1)
113
- fi
114
- if [ -z "$tgz_file" ] || [ ! -f "$tmp_dir/$tgz_file" ]; then
115
- echo "Error: failed to download $spec"
116
- echo "RESULT:{\"status\":\"error\",\"error\":\"download_failed\",\"detail\":\"failed to download $spec\"}"
117
- rm -rf "$tmp_dir"
118
- exit 1
119
- fi
120
-
121
- # ---------- 解压到插件目录 ----------
122
- mkdir -p "$plugin_dir"
123
- tar -xzf "$tmp_dir/$tgz_file" -C "$plugin_dir" --strip-components=1
124
- rm -rf "$tmp_dir"
125
-
126
- # ---------- 安装生产依赖 ----------
127
- # lightclawbot 声明了 bundledDependencies,npm pack 产出的 tgz 已包含所有依赖
128
- has_unbundled_deps=false
129
- if jq -e '.dependencies | length > 0' "$plugin_dir/package.json" > /dev/null 2>&1; then
130
- bundled_count=$(jq -r '.bundledDependencies // .bundleDependencies // [] | length' "$plugin_dir/package.json")
131
- dep_count=$(jq -r '.dependencies | length' "$plugin_dir/package.json")
132
- if [ "$bundled_count" -lt "$dep_count" ]; then
133
- has_unbundled_deps=true
134
- fi
135
- fi
136
-
137
- if [ "$has_unbundled_deps" = true ]; then
138
- echo "Installing dependencies for $id..."
139
- (cd "$plugin_dir" && CI=true pnpm install --prod)
140
- else
141
- echo "All dependencies bundled for $id, skipping dependency install"
142
- fi
143
- fi
144
-
145
- # ========== 更新配置文件 ==========
146
-
147
- version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
148
-
149
- if [ -f "$cfg" ]; then
150
- echo "Updating configuration..."
151
-
152
- # 1) 基础配置:plugins.entries + plugins.installs
153
- jq ".plugins.entries.\"${id}\" = {\"enabled\": true} | .plugins.installs.\"${id}\" = {\"source\": \"npm\", \"spec\": \"${spec}\", \"installPath\": \"${plugin_dir}\", \"version\": \"${version}\", \"installedAt\": \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\"}" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
154
-
155
- # 2) 确保插件在 allow 白名单中
156
- if ! jq -e ".plugins.allow // [] | index(\"${id}\")" "$cfg" > /dev/null 2>&1; then
157
- jq ".plugins.allow = ((.plugins.allow // []) + [\"${id}\"])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
158
- fi
159
-
160
- # 3) channel 配置:智能合并,迁移 apiKey -> apiKeys(新版本只需要 apiKeys)
161
- echo "Updating channel configuration for $id..."
162
-
163
- # 读取现有的 channel 配置
164
- existing_apikey=$(jq -r ".channels.\"${id}\".apiKey // \"\"" "$cfg" 2>/dev/null || echo "")
165
- existing_apikeys=$(jq -c ".channels.\"${id}\".apiKeys // []" "$cfg" 2>/dev/null || echo "[]")
166
-
167
- # 确保 channel 基础配置存在(enabled=true),并删除旧的 apiKey 字段
168
- jq ".channels.\"${id}\" = ((.channels.\"${id}\" // {}) + {\"enabled\": true}) | del(.channels.\"${id}\".apiKey)" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
169
-
170
- # 迁移:如果存在旧的 apiKey,将其加入 apiKeys 数组(去重)
171
- if [ -n "$existing_apikey" ]; then
172
- apikey_in_array=$(echo "$existing_apikeys" | jq --arg k "$existing_apikey" 'index($k)')
173
- if [ "$apikey_in_array" = "null" ]; then
174
- echo "Migrating existing apiKey to apiKeys array..."
175
- jq --arg k "$existing_apikey" ".channels.\"${id}\".apiKeys = ((.channels.\"${id}\".apiKeys // []) + [\$k])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
176
- else
177
- echo "Existing apiKey already in apiKeys array, skipping migration"
178
- fi
179
- fi
180
-
181
- # 如果通过环境变量传入了 APIKEY,确保它在 apiKeys 数组中(去重)
182
- if [ -n "$APIKEY" ]; then
183
- apikey_exists=$(jq -r --arg k "$APIKEY" ".channels.\"${id}\".apiKeys // [] | index(\$k)" "$cfg" 2>/dev/null || echo "null")
184
- if [ "$apikey_exists" = "null" ]; then
185
- echo "Adding APIKEY to apiKeys array..."
186
- jq --arg k "$APIKEY" ".channels.\"${id}\".apiKeys = ((.channels.\"${id}\".apiKeys // []) + [\$k])" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
187
- else
188
- echo "APIKEY already exists in apiKeys array"
189
- fi
190
- fi
191
-
192
- # 确保 apiKeys 字段至少存在(即使为空数组)
193
- jq ".channels.\"${id}\".apiKeys //= []" "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg"
194
-
195
- echo "Channel configuration updated successfully"
196
- fi
197
-
198
- # ========== 重启 Gateway ==========
199
-
200
- echo "Restarting openclaw gateway..."
201
- openclaw gateway restart >/dev/null 2>&1 || true
202
-
203
- elapsed=$((SECONDS - SCRIPT_START))
204
- echo ""
205
- if [ "$install_mode" = "up-to-date" ]; then
206
- echo "=== Plugin $id@$version config refreshed in ${elapsed}s ==="
207
- elif [ "$install_mode" = "upgrade" ]; then
208
- echo "=== Plugin $id upgraded to $version in ${elapsed}s ==="
209
- else
210
- echo "=== Plugin $id@$version installed in ${elapsed}s ==="
211
- fi
212
-
213
- # 结构化结果行,供前端程序解析(固定前缀 RESULT:)
214
- echo "RESULT:{\"status\":\"success\",\"mode\":\"${install_mode}\",\"version\":\"${version}\",\"elapsed\":${elapsed}}"