@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 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`。
@@ -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.1",
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": "./scripts/openclaw_ctl.sh"
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
@@ -1,7 +1,17 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
 
4
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
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 "=== 测试通过 ==="