@yyy9527/openclaw-manager 0.2.1 → 0.2.3
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 +71 -0
- package/config/openclaw.env +1 -0
- package/config/openclaw.env.example +2 -0
- package/config/openclaw.test.env +21 -0
- package/package.json +4 -3
- package/scripts/install_openclaw.sh +9 -0
- package/scripts/openclaw_ctl.sh +11 -1
- package/scripts/test_create_claw.sh +54 -0
package/README.md
CHANGED
|
@@ -32,6 +32,67 @@ clawctl --help
|
|
|
32
32
|
> 首次执行 `clawctl deploy` 需要拉取官方镜像,可能耗时较长(取决于网络)。
|
|
33
33
|
> clawhub 在 macOS 安装后,只有把 skills 安装到 `OPENCLAW_HOME_ROOT` 可见目录并挂载到容器,才能持久化并在容器内生效。
|
|
34
34
|
|
|
35
|
+
### 2.1 在另一台电脑安装
|
|
36
|
+
|
|
37
|
+
在新机器上只需用 npm 安装包并按下面步骤做一次初始化即可使用。
|
|
38
|
+
|
|
39
|
+
**前置:**
|
|
40
|
+
|
|
41
|
+
- macOS,已安装 **Node.js**(建议 18+)和 **Docker Desktop**(并已启动)
|
|
42
|
+
- 准备好 Git 令牌、飞书 webhook 等(见下方配置)
|
|
43
|
+
|
|
44
|
+
**安装与首次配置:**
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# 全局安装(推荐指定版本以便复现)
|
|
48
|
+
npm i -g @yyy9527/openclaw-manager
|
|
49
|
+
|
|
50
|
+
# 进入包所在目录(全局安装时通常在 node 的 lib/node_modules 下),或从本仓库复制配置到任意目录
|
|
51
|
+
# 方式 A:从本仓库 clone 后,在仓库根目录操作
|
|
52
|
+
cd /path/to/docker-claw
|
|
53
|
+
cp config/openclaw.env.example config/openclaw.env
|
|
54
|
+
cp .env.example .env
|
|
55
|
+
# 编辑 .env 和 config/openclaw.env,填入 GIT_TOKEN、FEISHU_WEBHOOK_URL 等
|
|
56
|
+
# 如希望首次 deploy 自动切到 Qwen,设置:
|
|
57
|
+
# OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=true
|
|
58
|
+
|
|
59
|
+
# 方式 B:仅用包内自带默认配置(需先找到包路径)
|
|
60
|
+
# npm root -g 可查看全局 node_modules 路径,包名 @yyy9527/openclaw-manager
|
|
61
|
+
# 复制该包内 config/openclaw.env.example -> config/openclaw.env,.env.example -> .env 并编辑
|
|
62
|
+
|
|
63
|
+
# 使用默认配置时,clawctl 会读取「当前工作目录」下的 config/openclaw.env 与 .env
|
|
64
|
+
# 因此建议:新建一个目录如 ~/openclaw-workspace,把 .env 和 config/openclaw.env 放进去,之后在该目录下执行 clawctl
|
|
65
|
+
cd ~/openclaw-workspace
|
|
66
|
+
clawctl setup
|
|
67
|
+
clawctl deploy
|
|
68
|
+
clawctl list-claw
|
|
69
|
+
clawctl status-claw master # 或你的实例名
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**常用命令示例(在新电脑上):**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
clawctl --help
|
|
76
|
+
clawctl check-env
|
|
77
|
+
clawctl deploy
|
|
78
|
+
clawctl list-claw
|
|
79
|
+
clawctl start-claw master
|
|
80
|
+
clawctl status-claw master
|
|
81
|
+
clawctl chat-claw master
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
指定配置与敏感变量文件(多环境时):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
clawctl --config ./config/openclaw.prod.env --env-file ./.env.prod status
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
安装指定版本(例如 0.2.2):
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm i -g @yyy9527/openclaw-manager@0.2.2
|
|
94
|
+
```
|
|
95
|
+
|
|
35
96
|
## 3. 常用命令
|
|
36
97
|
|
|
37
98
|
- `clawctl --help`:查看友好的 CLI 帮助
|
|
@@ -99,6 +160,7 @@ npm run ctl -- --config ./config/openclaw.prod.env --env-file ./.env.prod apply-
|
|
|
99
160
|
> 若出现 `Rate limit exceeded`,请先执行 `clawhub login` 再重试 `clawctl sync-skills`。
|
|
100
161
|
> 如果 TUI 报 `No API key found for provider "anthropic"`,先执行 `clawctl apply-config`。
|
|
101
162
|
> 如果 TUI 报 `not connected to gateway`,通常是网关刚重启尚未就绪;`chat-claw` 内置等待逻辑,超时可执行 `clawctl apply-config` 后重试。
|
|
163
|
+
> 若希望首次部署自动避免 anthropic 缺 key 问题,可在配置中开启 `OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=true`。
|
|
102
164
|
|
|
103
165
|
### 非交互切换到厂商 Qwen
|
|
104
166
|
|
|
@@ -191,4 +253,13 @@ npm login
|
|
|
191
253
|
npm publish --access public
|
|
192
254
|
```
|
|
193
255
|
|
|
256
|
+
使用 `.env` 中的 `NPM_TOKEN` 发布时(例如 CI 或本机已配置):
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# 在项目根目录
|
|
260
|
+
printf '//registry.npmjs.org/:_authToken=%s\n' "${NPM_TOKEN}" > .npmrc
|
|
261
|
+
export NPM_TOKEN # 若未导出,先 source .env 或 export NPM_TOKEN=你的令牌
|
|
262
|
+
npm publish --access public
|
|
263
|
+
```
|
|
264
|
+
|
|
194
265
|
> 当前包名:`@yyy9527/openclaw-manager`。CLI 主命令为 `clawctl`。
|
package/config/openclaw.env
CHANGED
|
@@ -9,6 +9,7 @@ OPENCLAW_HOME_ROOT=${HOME}/openclaws
|
|
|
9
9
|
OPENCLAW_SHARED_SKILLS_DIR=${OPENCLAW_HOME_ROOT}/shared/skills
|
|
10
10
|
OPENCLAW_ENABLE_CLAWHUB_SKILLS=true
|
|
11
11
|
OPENCLAW_CLAWHUB_INSTALL_RETRIES=8
|
|
12
|
+
OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=false
|
|
12
13
|
OPENCLAW_FORCE_OLLAMA_AFTER_APPLY=false
|
|
13
14
|
OPENCLAW_ALLOW_OLLAMA_OVERRIDE=false
|
|
14
15
|
OLLAMA_BASE_URL=http://host.docker.internal:11434
|
|
@@ -27,6 +27,8 @@ OPENCLAW_SHARED_SKILLS_DIR=${OPENCLAW_HOME_ROOT}/shared/skills
|
|
|
27
27
|
OPENCLAW_ENABLE_CLAWHUB_SKILLS=true
|
|
28
28
|
# clawhub 安装重试次数(网络超时时自动重试)
|
|
29
29
|
OPENCLAW_CLAWHUB_INSTALL_RETRIES=8
|
|
30
|
+
# 是否在 deploy 后自动执行 set-qwen + apply-config(默认 false)
|
|
31
|
+
OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=false
|
|
30
32
|
# 是否在 apply-config 后强制回写 Ollama 模型(默认 false)
|
|
31
33
|
OPENCLAW_FORCE_OLLAMA_AFTER_APPLY=false
|
|
32
34
|
# 是否允许执行 bootstrap-models 覆盖当前主模型(默认 false)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 测试配置:单实例 xiaomo(用于包流程自测)
|
|
2
|
+
OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw
|
|
3
|
+
OPENCLAW_VERSION=latest
|
|
4
|
+
OPENCLAW_INSTANCE_IDS=xiaomo
|
|
5
|
+
OPENCLAW_NAME_PREFIX=openclaw
|
|
6
|
+
OPENCLAW_BASE_HTTP_PORT=3200
|
|
7
|
+
OPENCLAW_CONTAINER_PORT=18789
|
|
8
|
+
OPENCLAW_HOME_ROOT=${HOME}/openclaws
|
|
9
|
+
OPENCLAW_SHARED_SKILLS_DIR=${OPENCLAW_HOME_ROOT}/shared/skills
|
|
10
|
+
OPENCLAW_ENABLE_CLAWHUB_SKILLS=false
|
|
11
|
+
OPENCLAW_CLAWHUB_INSTALL_RETRIES=8
|
|
12
|
+
OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=false
|
|
13
|
+
OPENCLAW_FORCE_OLLAMA_AFTER_APPLY=false
|
|
14
|
+
OPENCLAW_ALLOW_OLLAMA_OVERRIDE=false
|
|
15
|
+
OLLAMA_BASE_URL=http://host.docker.internal:11434
|
|
16
|
+
OLLAMA_MODEL=qwen3.5:27b
|
|
17
|
+
OLLAMA_API_KEY=ollama-local
|
|
18
|
+
GIT_PLATFORM=gitee
|
|
19
|
+
GIT_REPO=yangyiyuan0825/openclaws
|
|
20
|
+
GIT_API_BASE=https://gitee.com/api/v5
|
|
21
|
+
FEISHU_ENABLED=true
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yyy9527/openclaw-manager",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "OpenClaw multi-instance manager for macOS with docker, TUI, and collaboration workflow.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
9
|
-
"clawctl": "
|
|
9
|
+
"clawctl": "scripts/openclaw_ctl.sh"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"scripts/",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"bootstrap-models": "bash ./scripts/openclaw_ctl.sh bootstrap-models",
|
|
42
42
|
"set-model:qwen": "bash ./scripts/openclaw_ctl.sh set-qwen",
|
|
43
43
|
"health-check": "bash ./scripts/openclaw_ctl.sh health-check",
|
|
44
|
-
"self-test": "bash ./scripts/openclaw_ctl.sh self-test"
|
|
44
|
+
"self-test": "bash ./scripts/openclaw_ctl.sh self-test",
|
|
45
|
+
"test": "bash ./scripts/test_create_claw.sh"
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -53,6 +53,7 @@ check_required_vars() {
|
|
|
53
53
|
fi
|
|
54
54
|
: "${OPENCLAW_HOME_ROOT:?OPENCLAW_HOME_ROOT 未配置}"
|
|
55
55
|
OPENCLAW_SHARED_SKILLS_DIR="${OPENCLAW_SHARED_SKILLS_DIR:-${OPENCLAW_HOME_ROOT}/shared/skills}"
|
|
56
|
+
OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY="${OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY:-false}"
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
split_instances() {
|
|
@@ -109,6 +110,14 @@ main() {
|
|
|
109
110
|
i=$((i + 1))
|
|
110
111
|
done
|
|
111
112
|
|
|
113
|
+
if [ "${OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY}" = "true" ]; then
|
|
114
|
+
log "检测到 OPENCLAW_AUTO_SET_QWEN_ON_DEPLOY=true,自动切换到 Qwen 并应用配置"
|
|
115
|
+
OPENCLAW_CONFIG_FILE="${CONFIG_FILE}" OPENCLAW_DOTENV_FILE="${ENV_FILE}" \
|
|
116
|
+
"${PROJECT_ROOT}/scripts/set_qwen_vendor_model.sh"
|
|
117
|
+
OPENCLAW_CONFIG_FILE="${CONFIG_FILE}" OPENCLAW_DOTENV_FILE="${ENV_FILE}" \
|
|
118
|
+
"${PROJECT_ROOT}/scripts/apply_config.sh"
|
|
119
|
+
fi
|
|
120
|
+
|
|
112
121
|
if ! "${PROJECT_ROOT}/scripts/bootstrap_models.sh"; then
|
|
113
122
|
log "模型引导未完全成功,可稍后手动执行:npm run bootstrap-models"
|
|
114
123
|
fi
|
package/scripts/openclaw_ctl.sh
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
SOURCE_PATH="${BASH_SOURCE[0]}"
|
|
5
|
+
while [ -L "${SOURCE_PATH}" ]; do
|
|
6
|
+
LINK_DIR="$(cd -P "$(dirname "${SOURCE_PATH}")" && pwd)"
|
|
7
|
+
LINK_TARGET="$(readlink "${SOURCE_PATH}")"
|
|
8
|
+
if [[ "${LINK_TARGET}" != /* ]]; then
|
|
9
|
+
SOURCE_PATH="${LINK_DIR}/${LINK_TARGET}"
|
|
10
|
+
else
|
|
11
|
+
SOURCE_PATH="${LINK_TARGET}"
|
|
12
|
+
fi
|
|
13
|
+
done
|
|
14
|
+
SCRIPT_DIR="$(cd -P "$(dirname "${SOURCE_PATH}")" && pwd)"
|
|
5
15
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
6
16
|
DEFAULT_CONFIG_FILE="${PROJECT_ROOT}/config/openclaw.env"
|
|
7
17
|
DEFAULT_DOTENV_FILE="${PROJECT_ROOT}/.env"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 测试用例:使用 test 配置执行「创建龙虾」流程并做简单断言
|
|
3
|
+
# 用于回归:check-env -> deploy -> list-claw 含 xiaomo -> status-claw xiaomo 成功
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SOURCE_PATH="${BASH_SOURCE[0]}"
|
|
7
|
+
while [ -L "${SOURCE_PATH}" ]; do
|
|
8
|
+
LINK_DIR="$(cd -P "$(dirname "${SOURCE_PATH}")" && pwd)"
|
|
9
|
+
LINK_TARGET="$(readlink "${SOURCE_PATH}")"
|
|
10
|
+
if [[ "${LINK_TARGET}" != /* ]]; then
|
|
11
|
+
SOURCE_PATH="${LINK_DIR}/${LINK_TARGET}"
|
|
12
|
+
else
|
|
13
|
+
SOURCE_PATH="${LINK_TARGET}"
|
|
14
|
+
fi
|
|
15
|
+
done
|
|
16
|
+
SCRIPT_DIR="$(cd -P "$(dirname "${SOURCE_PATH}")" && pwd)"
|
|
17
|
+
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
18
|
+
CONFIG="${PROJECT_ROOT}/config/openclaw.test.env"
|
|
19
|
+
ENV_FILE="${PROJECT_ROOT}/.env"
|
|
20
|
+
CTL="${PROJECT_ROOT}/scripts/openclaw_ctl.sh"
|
|
21
|
+
|
|
22
|
+
if [ ! -f "${ENV_FILE}" ]; then
|
|
23
|
+
echo "跳过 deploy:未找到 .env,请复制 .env.example 为 .env 并填写后重试。仅执行 list-claw/status-claw 断言(需已有 xiaomo 容器)。"
|
|
24
|
+
SKIP_DEPLOY=1
|
|
25
|
+
else
|
|
26
|
+
SKIP_DEPLOY=0
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
run_ctl() {
|
|
30
|
+
OPENCLAW_CONFIG_FILE="${CONFIG}" OPENCLAW_DOTENV_FILE="${ENV_FILE}" bash "${CTL}" "$@"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
echo "=== 1. check-env ==="
|
|
34
|
+
run_ctl check-env
|
|
35
|
+
|
|
36
|
+
if [ "${SKIP_DEPLOY}" = 0 ]; then
|
|
37
|
+
echo "=== 2. deploy(test 配置单实例 xiaomo)==="
|
|
38
|
+
run_ctl deploy
|
|
39
|
+
else
|
|
40
|
+
echo "=== 2. 跳过 deploy ==="
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
echo "=== 3. list-claw(断言含 xiaomo)==="
|
|
44
|
+
list_out="$(run_ctl list-claw)"
|
|
45
|
+
echo "${list_out}"
|
|
46
|
+
if ! echo "${list_out}" | grep -q 'xiaomo'; then
|
|
47
|
+
echo "断言失败:list-claw 输出中未包含 xiaomo" >&2
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
echo "=== 4. status-claw xiaomo ==="
|
|
52
|
+
run_ctl status-claw xiaomo
|
|
53
|
+
|
|
54
|
+
echo "=== 测试通过 ==="
|