@okclaw-build/cli 1.0.0-beta.45 → 1.0.0-beta.47
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/index.js +1 -1
- package/dist/installers/openclaw.d.ts +8 -2
- package/dist/installers/openclaw.js +35 -57
- package/dist/installers/openclaw.js.map +1 -1
- package/package.json +1 -1
- package/README.md +0 -48
package/dist/index.js
CHANGED
|
@@ -147,7 +147,7 @@ Global flags (before the command):
|
|
|
147
147
|
Components:
|
|
148
148
|
openclaw Core AI Agent framework (npm install)
|
|
149
149
|
openviking Long-term memory plugin (pip + openclaw plugin, needs --package-url)
|
|
150
|
-
dingtalk DingTalk channel (npm: @
|
|
150
|
+
dingtalk DingTalk channel (npm: @soimy/dingtalk)
|
|
151
151
|
feishu Feishu/Lark channel (bundled with OpenClaw, config only)
|
|
152
152
|
wechat WeChat channel (npm: @tencent-weixin/openclaw-weixin)
|
|
153
153
|
s3 S3 IM channel (needs --package-url)
|
|
@@ -12,8 +12,14 @@ export declare class OpenclawInstaller implements Installer {
|
|
|
12
12
|
* }
|
|
13
13
|
* }
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* REPLACES openclaw.json -> models.providers entirely. The old merge
|
|
16
|
+
* semantics left stale providers behind on every deploy: switching from
|
|
17
|
+
* deepseek to qwen would still leave deepseek under models.providers.
|
|
18
|
+
* models.providers is a protected map in openclaw — full replacement
|
|
19
|
+
* requires the --replace flag, otherwise `openclaw config set` refuses
|
|
20
|
+
* to drop existing keys.
|
|
21
|
+
*
|
|
22
|
+
* Sets agents.defaults.model.primary to the first provider's first model.
|
|
17
23
|
*/
|
|
18
24
|
configure(config: Record<string, unknown>): Promise<void>;
|
|
19
25
|
uninstall(): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, cpSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
2
|
import { shell, shellRetry, shellCapture } from '../utils/shell.js';
|
|
3
3
|
import { ensureNodeVersion, checkDiskSpace } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
@@ -64,6 +64,11 @@ export class OpenclawInstaller {
|
|
|
64
64
|
await shell('openclaw config set plugins.slots.memory memory-core').catch(() => {
|
|
65
65
|
warn('Failed to set memory slot to memory-core (plugin not registered), continuing...');
|
|
66
66
|
});
|
|
67
|
+
// OKClaw 部署的 OpenClaw 实例不需要主动 agent heartbeat;设为 0m
|
|
68
|
+
// 是持久关闭,必须在 gateway 启动前写入配置。
|
|
69
|
+
await shell('openclaw config set agents.defaults.heartbeat.every "0m"').catch(() => {
|
|
70
|
+
warn('Failed to disable OpenClaw heartbeat, continuing...');
|
|
71
|
+
});
|
|
67
72
|
await shell('openclaw config set tools.profile full');
|
|
68
73
|
info(`openclaw@${version} installed.`);
|
|
69
74
|
}
|
|
@@ -76,73 +81,46 @@ export class OpenclawInstaller {
|
|
|
76
81
|
* }
|
|
77
82
|
* }
|
|
78
83
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
84
|
+
* REPLACES openclaw.json -> models.providers entirely. The old merge
|
|
85
|
+
* semantics left stale providers behind on every deploy: switching from
|
|
86
|
+
* deepseek to qwen would still leave deepseek under models.providers.
|
|
87
|
+
* models.providers is a protected map in openclaw — full replacement
|
|
88
|
+
* requires the --replace flag, otherwise `openclaw config set` refuses
|
|
89
|
+
* to drop existing keys.
|
|
90
|
+
*
|
|
91
|
+
* Sets agents.defaults.model.primary to the first provider's first model.
|
|
81
92
|
*/
|
|
82
93
|
async configure(config) {
|
|
83
94
|
if (Object.keys(config).length === 0)
|
|
84
95
|
return;
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// (cli writes channels.dingtalk.clientSecret → daemon reload picks
|
|
93
|
-
// up an older view that didn't have it → daemon rewrites the
|
|
94
|
-
// channels block without clientSecret)
|
|
95
|
-
// The latter form looks like a successful deploy with mysteriously
|
|
96
|
-
// missing config fields. Stop the daemon for the entire configure().
|
|
96
|
+
// `openclaw config set` does a hash-checked atomic replace on
|
|
97
|
+
// openclaw.json; if the daemon's file-watcher writes its own snapshot
|
|
98
|
+
// back mid-flight the cli set either fails with
|
|
99
|
+
// ConfigMutationConflictError or silently overwrites cli-written
|
|
100
|
+
// fields with a stale view (e.g. dingtalk.clientSecret disappears
|
|
101
|
+
// after a successful-looking deploy). Stop the daemon for the entire
|
|
102
|
+
// configure() window.
|
|
97
103
|
await stopDaemonForExclusiveAccess('openclaw provider config');
|
|
98
104
|
info('Configuring openclaw models & providers...');
|
|
99
|
-
|
|
100
|
-
if (existsSync(OPENCLAW_CONFIG)) {
|
|
101
|
-
try {
|
|
102
|
-
openclawConfig = JSON.parse(readFileSync(OPENCLAW_CONFIG, 'utf8'));
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
warn('Failed to parse existing openclaw.json, starting fresh for models section.');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Ensure models.providers exists
|
|
109
|
-
if (!openclawConfig.models || typeof openclawConfig.models !== 'object') {
|
|
110
|
-
openclawConfig.models = { mode: 'merge', providers: {} };
|
|
111
|
-
}
|
|
112
|
-
const models = openclawConfig.models;
|
|
113
|
-
if (!models.providers || typeof models.providers !== 'object') {
|
|
114
|
-
models.providers = {};
|
|
115
|
-
}
|
|
116
|
-
const existingProviders = models.providers;
|
|
117
|
-
// Merge providers and find default model
|
|
105
|
+
// Default model = first provider's first model id
|
|
118
106
|
let defaultModel = '';
|
|
119
107
|
for (const [providerName, providerConfig] of Object.entries(config)) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (modelList?.[0]?.id) {
|
|
126
|
-
defaultModel = `${providerName}/${modelList[0].id}`;
|
|
127
|
-
}
|
|
108
|
+
const pc = providerConfig;
|
|
109
|
+
const modelList = pc.models;
|
|
110
|
+
if (modelList?.[0]?.id) {
|
|
111
|
+
defaultModel = `${providerName}/${modelList[0].id}`;
|
|
112
|
+
break;
|
|
128
113
|
}
|
|
129
114
|
}
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
115
|
+
// Full replace via `openclaw config set ... --replace`. --strict-json
|
|
116
|
+
// forces JSON parsing (no raw-string fallback). Single quotes are
|
|
117
|
+
// escaped using the standard '\'' pattern so an apiKey containing a
|
|
118
|
+
// single quote doesn't break out of the shell argument.
|
|
119
|
+
const providersJson = JSON.stringify(config).replace(/'/g, `'\\''`);
|
|
120
|
+
await shell(`openclaw config set models.providers '${providersJson}' --strict-json --replace`);
|
|
121
|
+
info(`Replaced models.providers with: ${Object.keys(config).join(', ')}`);
|
|
135
122
|
if (defaultModel) {
|
|
136
|
-
|
|
137
|
-
await shell(`openclaw config set agents.defaults.model.primary '${defaultModel}'`).catch(() => {
|
|
138
|
-
warn('Failed to set default model via CLI, patching directly...');
|
|
139
|
-
const agents = (openclawConfig.agents ?? {});
|
|
140
|
-
const defaults = (agents.defaults ?? {});
|
|
141
|
-
defaults.model = { primary: defaultModel };
|
|
142
|
-
agents.defaults = defaults;
|
|
143
|
-
openclawConfig.agents = agents;
|
|
144
|
-
writeFileSync(OPENCLAW_CONFIG, JSON.stringify(openclawConfig, null, 2) + '\n', 'utf8');
|
|
145
|
-
});
|
|
123
|
+
await shell(`openclaw config set agents.defaults.model.primary '${defaultModel}'`);
|
|
146
124
|
info(`Default model: ${defaultModel}`);
|
|
147
125
|
}
|
|
148
126
|
info('openclaw configured.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# okclaw-cli
|
|
2
|
-
|
|
3
|
-
> 目标主机上的部署与运维 CLI,用于安装 / 管理 OpenClaw、OpenViking、渠道插件和 Skill。
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
| 项目 | 说明 |
|
|
8
|
-
|------|------|
|
|
9
|
-
| 类型 | Node.js / TypeScript CLI |
|
|
10
|
-
| 包名 | `@okclaw-build/cli` |
|
|
11
|
-
| Node 要求 | `>=22` |
|
|
12
|
-
| 命令入口 | `okclaw` / `bin/okclaw.js` |
|
|
13
|
-
|
|
14
|
-
## 当前命令
|
|
15
|
-
|
|
16
|
-
- `okclaw install <component>`:安装 `openclaw`、`openviking`、`dingtalk`、`feishu`、`wechat`、`s3`。
|
|
17
|
-
- `okclaw uninstall <component>`:卸载组件。
|
|
18
|
-
- `okclaw check`:检查并安装系统依赖。
|
|
19
|
-
- `okclaw start|stop|restart|status`:管理 OpenClaw gateway。
|
|
20
|
-
- `okclaw edit <target> --file <path>`:写入配置文件。
|
|
21
|
-
- `okclaw show <target...>`:读取配置文件;批量读取支持 `--output=ndjson`。
|
|
22
|
-
- `okclaw feed --file <path>`:投喂知识库文件。
|
|
23
|
-
- `okclaw skill install|uninstall`:安装 / 卸载 Skill。
|
|
24
|
-
|
|
25
|
-
全局参数:
|
|
26
|
-
|
|
27
|
-
- `--output text|ndjson`
|
|
28
|
-
- `--op-id <uuid>`
|
|
29
|
-
- `--ndjson-path <path>`
|
|
30
|
-
|
|
31
|
-
## 开发
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
pnpm install
|
|
35
|
-
pnpm build
|
|
36
|
-
pnpm test
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## 运行约束
|
|
40
|
-
|
|
41
|
-
- 除 `--help` / `--version` 外,命令会要求 root,非 root 时自动尝试 sudo。
|
|
42
|
-
- 命令会强制以 `/root` 为 HOME。
|
|
43
|
-
- 安装 Node.js / npm / pip 依赖时内置国内镜像加速。
|
|
44
|
-
|
|
45
|
-
## 相关文档
|
|
46
|
-
|
|
47
|
-
- [根 README](../README.md)
|
|
48
|
-
- [部署架构](../docs/okclaw-deployment.md)
|