@okclaw-build/cli 1.0.0-beta.5 → 1.0.0-beta.52
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/commands/backup.d.ts +16 -0
- package/dist/commands/backup.js +80 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/check.js +22 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/edit.d.ts +2 -7
- package/dist/commands/edit.js +27 -15
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/feed.js +63 -19
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/install.js +79 -18
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/migration.d.ts +1 -0
- package/dist/commands/migration.js +205 -0
- package/dist/commands/migration.js.map +1 -0
- package/dist/commands/restore.d.ts +16 -0
- package/dist/commands/restore.js +75 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/service.js +56 -13
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/show.d.ts +13 -0
- package/dist/commands/show.js +70 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/skill.d.ts +1 -0
- package/dist/commands/skill.js +137 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +46 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.js +102 -9
- package/dist/index.js.map +1 -1
- package/dist/installers/base.d.ts +3 -1
- package/dist/installers/channel.d.ts +19 -3
- package/dist/installers/channel.js +170 -30
- package/dist/installers/channel.js.map +1 -1
- package/dist/installers/openclaw.d.ts +10 -2
- package/dist/installers/openclaw.js +154 -52
- package/dist/installers/openclaw.js.map +1 -1
- package/dist/installers/openviking-purge.d.ts +52 -0
- package/dist/installers/openviking-purge.js +380 -0
- package/dist/installers/openviking-purge.js.map +1 -0
- package/dist/installers/openviking.js +1 -2
- package/dist/installers/openviking.js.map +1 -1
- package/dist/installers/skill.d.ts +5 -2
- package/dist/installers/skill.js +67 -18
- package/dist/installers/skill.js.map +1 -1
- package/dist/migration/archive.d.ts +14 -0
- package/dist/migration/archive.js +84 -0
- package/dist/migration/archive.js.map +1 -0
- package/dist/migration/crypto.d.ts +16 -0
- package/dist/migration/crypto.js +56 -0
- package/dist/migration/crypto.js.map +1 -0
- package/dist/migration/manifest.d.ts +39 -0
- package/dist/migration/manifest.js +140 -0
- package/dist/migration/manifest.js.map +1 -0
- package/dist/openclaw-user-data.d.ts +81 -0
- package/dist/openclaw-user-data.js +411 -0
- package/dist/openclaw-user-data.js.map +1 -0
- package/dist/output/mode.d.ts +11 -0
- package/dist/output/mode.js +27 -0
- package/dist/output/mode.js.map +1 -0
- package/dist/output/ndjson.d.ts +57 -0
- package/dist/output/ndjson.js +136 -0
- package/dist/output/ndjson.js.map +1 -0
- package/dist/utils/constants.d.ts +8 -13
- package/dist/utils/constants.js +31 -20
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/deps.d.ts +34 -3
- package/dist/utils/deps.js +62 -100
- package/dist/utils/deps.js.map +1 -1
- package/dist/utils/install-safety.d.ts +25 -0
- package/dist/utils/install-safety.js +95 -0
- package/dist/utils/install-safety.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +31 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mirror.js +14 -0
- package/dist/utils/mirror.js.map +1 -1
- package/dist/utils/openclaw-config-cli.d.ts +19 -0
- package/dist/utils/openclaw-config-cli.js +81 -0
- package/dist/utils/openclaw-config-cli.js.map +1 -0
- package/dist/utils/openclaw-daemon.d.ts +58 -0
- package/dist/utils/openclaw-daemon.js +154 -0
- package/dist/utils/openclaw-daemon.js.map +1 -0
- package/dist/utils/shell.d.ts +23 -2
- package/dist/utils/shell.js +138 -5
- package/dist/utils/shell.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function uninstallCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { OpenclawInstaller } from '../installers/openclaw.js';
|
|
2
|
+
import { error, info, success } from '../utils/logger.js';
|
|
3
|
+
import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
|
|
4
|
+
function getInstaller(component) {
|
|
5
|
+
switch (component) {
|
|
6
|
+
case 'openclaw': return new OpenclawInstaller();
|
|
7
|
+
default: return null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export async function uninstallCommand(args) {
|
|
11
|
+
const emitter = new NdjsonEmitter('uninstall');
|
|
12
|
+
registerExitHandlers(emitter);
|
|
13
|
+
const component = args[0];
|
|
14
|
+
if (!component) {
|
|
15
|
+
error('Usage: okclaw uninstall <component>');
|
|
16
|
+
emitter.end(false, 1, 'E_USAGE');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const installer = getInstaller(component);
|
|
20
|
+
if (!installer) {
|
|
21
|
+
error(`Uninstall not supported for component: ${component}`);
|
|
22
|
+
emitter.end(false, 1, 'E_UNSUPPORTED');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (!installer.uninstall) {
|
|
26
|
+
error(`Component ${component} does not support uninstall`);
|
|
27
|
+
emitter.end(false, 1, 'E_UNSUPPORTED');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
emitter.start(`uninstalling ${component}`, { component });
|
|
31
|
+
info(`Uninstalling ${component}...`);
|
|
32
|
+
try {
|
|
33
|
+
emitter.stepStart('uninstall', `running uninstall for ${component}`);
|
|
34
|
+
await installer.uninstall();
|
|
35
|
+
emitter.stepDone('uninstall', `${component} uninstalled`);
|
|
36
|
+
success(`${component} uninstalled.`);
|
|
37
|
+
emitter.end(true, 0, undefined, { component });
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
41
|
+
error(msg);
|
|
42
|
+
emitter.end(false, 1, 'E_UNINSTALL_FAILED', { error: msg });
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,SAAS,YAAY,CAAC,SAAiB;IACrC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC;QAChD,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAc;IACnD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IAC/C,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,aAAa,SAAS,6BAA6B,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,gBAAgB,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,SAAS,KAAK,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,yBAAyB,SAAS,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,SAAS,eAAe,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,76 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { installCommand } from './commands/install.js';
|
|
3
|
+
import { uninstallCommand } from './commands/uninstall.js';
|
|
3
4
|
import { checkCommand } from './commands/check.js';
|
|
4
5
|
import { editCommand } from './commands/edit.js';
|
|
6
|
+
import { showCommand } from './commands/show.js';
|
|
5
7
|
import { feedCommand } from './commands/feed.js';
|
|
8
|
+
import { backupCommand } from './commands/backup.js';
|
|
9
|
+
import { restoreCommand } from './commands/restore.js';
|
|
6
10
|
import { startCommand, stopCommand, restartCommand, statusCommand } from './commands/service.js';
|
|
11
|
+
import { skillCommand } from './commands/skill.js';
|
|
7
12
|
import { ensureRoot } from './utils/shell.js';
|
|
8
13
|
import { error } from './utils/logger.js';
|
|
9
|
-
|
|
14
|
+
import { setNdjsonPath, setOutputMode, isNdjson } from './output/mode.js';
|
|
15
|
+
import { getActiveEmitter, NdjsonEmitter } from './output/ndjson.js';
|
|
16
|
+
/**
|
|
17
|
+
* 从 argv 里抽出全局 flag --output=<mode> 和 --op-id=<uuid>,返回剩余参数。
|
|
18
|
+
* 支持 "--flag=value" 与 "--flag value" 两种写法。
|
|
19
|
+
*/
|
|
20
|
+
function extractGlobalFlags(argv) {
|
|
21
|
+
const rest = [];
|
|
22
|
+
let output = 'text';
|
|
23
|
+
let opId;
|
|
24
|
+
let ndjsonPath;
|
|
25
|
+
for (let i = 0; i < argv.length; i++) {
|
|
26
|
+
const arg = argv[i];
|
|
27
|
+
if (arg === '--output' && argv[i + 1]) {
|
|
28
|
+
output = argv[++i] === 'ndjson' ? 'ndjson' : 'text';
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (arg.startsWith('--output=')) {
|
|
32
|
+
output = arg.slice('--output='.length) === 'ndjson' ? 'ndjson' : 'text';
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (arg === '--op-id' && argv[i + 1]) {
|
|
36
|
+
opId = argv[++i];
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (arg.startsWith('--op-id=')) {
|
|
40
|
+
opId = arg.slice('--op-id='.length);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (arg === '--ndjson-path' && argv[i + 1]) {
|
|
44
|
+
ndjsonPath = argv[++i];
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (arg.startsWith('--ndjson-path=')) {
|
|
48
|
+
ndjsonPath = arg.slice('--ndjson-path='.length);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
rest.push(arg);
|
|
52
|
+
}
|
|
53
|
+
return { rest, output, opId, ndjsonPath };
|
|
54
|
+
}
|
|
55
|
+
const { rest, output, opId, ndjsonPath } = extractGlobalFlags(process.argv.slice(2));
|
|
56
|
+
setOutputMode(output, opId);
|
|
57
|
+
setNdjsonPath(ndjsonPath);
|
|
58
|
+
const [command, ...args] = rest;
|
|
10
59
|
async function main() {
|
|
11
60
|
// All commands require root (or auto-sudo)
|
|
12
61
|
if (command && command !== '--help' && command !== '-h' && command !== '--version' && command !== '-v') {
|
|
13
62
|
ensureRoot();
|
|
14
63
|
}
|
|
15
64
|
switch (command) {
|
|
65
|
+
case 'skill':
|
|
66
|
+
await skillCommand(args);
|
|
67
|
+
break;
|
|
16
68
|
case 'install':
|
|
17
69
|
await installCommand(args);
|
|
18
70
|
break;
|
|
71
|
+
case 'uninstall':
|
|
72
|
+
await uninstallCommand(args);
|
|
73
|
+
break;
|
|
19
74
|
case 'check':
|
|
20
75
|
await checkCommand();
|
|
21
76
|
break;
|
|
@@ -34,9 +89,18 @@ async function main() {
|
|
|
34
89
|
case 'edit':
|
|
35
90
|
await editCommand(args);
|
|
36
91
|
break;
|
|
92
|
+
case 'show':
|
|
93
|
+
await showCommand(args);
|
|
94
|
+
break;
|
|
37
95
|
case 'feed':
|
|
38
96
|
await feedCommand(args);
|
|
39
97
|
break;
|
|
98
|
+
case 'backup':
|
|
99
|
+
await backupCommand(args);
|
|
100
|
+
break;
|
|
101
|
+
case 'restore':
|
|
102
|
+
await restoreCommand(args);
|
|
103
|
+
break;
|
|
40
104
|
case '--version':
|
|
41
105
|
case '-v': {
|
|
42
106
|
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
@@ -58,30 +122,42 @@ function printHelp() {
|
|
|
58
122
|
console.log(`
|
|
59
123
|
okclaw - OKClaw Deployment CLI
|
|
60
124
|
|
|
61
|
-
Usage: okclaw <command> [args...]
|
|
125
|
+
Usage: okclaw [global-flags] <command> [args...]
|
|
62
126
|
|
|
127
|
+
Global flags (before the command):
|
|
128
|
+
--output text|ndjson Output mode (default: text)
|
|
129
|
+
--op-id <uuid> Operation id, echoed in every ndjson event's fields.opId
|
|
130
|
+
--ndjson-path <path> Append ndjson to file instead of stdout (used in detached mode)
|
|
131
|
+
|
|
132
|
+
okclaw skill install <name> --version <ver> [--package-url <url>] Install a skill
|
|
133
|
+
okclaw skill uninstall <name> Uninstall a skill
|
|
63
134
|
okclaw install <component> --version <ver> [--config '<json>'] [--config-file <path>] [--package-url <url>]
|
|
135
|
+
okclaw uninstall <component> Uninstall a component (currently: openclaw)
|
|
64
136
|
okclaw check Check & install system dependencies
|
|
65
137
|
okclaw start Start openclaw gateway
|
|
66
138
|
okclaw stop Stop openclaw gateway
|
|
67
139
|
okclaw restart Restart openclaw gateway
|
|
68
140
|
okclaw status Show gateway status
|
|
69
|
-
okclaw edit <target> --file <path> Write config file (user/identity/soul/agents)
|
|
141
|
+
okclaw edit <target> --file <path> Write config file (user/identity/soul/agents/memory/tools/openclaw-json)
|
|
142
|
+
okclaw show <target...> Read config file content to stdout (batch requires --output=ndjson)
|
|
70
143
|
okclaw feed --file <path> Feed file into knowledge base
|
|
144
|
+
okclaw backup openclaw-user-data --archive [--archive-path <path>] [--include-workspace-extra]
|
|
145
|
+
okclaw restore openclaw-user-data --archive <path> [--include-workspace-extra]
|
|
71
146
|
|
|
72
147
|
Components:
|
|
73
148
|
openclaw Core AI Agent framework (npm install)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
feishu Feishu/Lark channel (npm: @openclaw/feishu)
|
|
149
|
+
dingtalk DingTalk channel (npm: @soimy/dingtalk)
|
|
150
|
+
feishu Feishu/Lark channel (bundled with OpenClaw, config only)
|
|
77
151
|
wechat WeChat channel (npm: @tencent-weixin/openclaw-weixin)
|
|
78
152
|
s3 S3 IM channel (needs --package-url)
|
|
79
153
|
|
|
80
154
|
Examples:
|
|
81
155
|
okclaw install openclaw --version 2026.3.24 --config-file /root/okclaw/config/openclaw.json
|
|
82
|
-
okclaw install openviking --version 0.2.15 --package-url /tmp/ov-plugin.tar.gz --config-file /root/okclaw/config/openviking.json
|
|
83
156
|
okclaw install dingtalk --version 2.0.1 --config '{"clientId":"xxx","clientSecret":"xxx"}'
|
|
84
157
|
okclaw install s3 --version 1.0.0 --package-url /tmp/channel-s3.tar.gz
|
|
158
|
+
okclaw uninstall openclaw
|
|
159
|
+
okclaw skill install my-skill --version 1.0.0 --package-url https://example.com/skill.zip
|
|
160
|
+
okclaw skill uninstall my-skill
|
|
85
161
|
okclaw restart
|
|
86
162
|
okclaw status
|
|
87
163
|
|
|
@@ -89,11 +165,28 @@ Notes:
|
|
|
89
165
|
- All commands auto-elevate to root via sudo if needed
|
|
90
166
|
- All paths are anchored to /root/ (forced HOME=/root)
|
|
91
167
|
- npm uses npmmirror, pip uses tsinghua mirror (China acceleration)
|
|
92
|
-
- Node.js >=
|
|
168
|
+
- Node.js >= 24 (LTS) is auto-installed/upgraded via nvm if missing or too old
|
|
169
|
+
- openclaw-user-data defaults to core workspace files and skills only
|
|
170
|
+
- --include-workspace-extra also migrates other OpenClaw workspace root entries, but never /root/.openclaw/openclaw.json
|
|
93
171
|
`);
|
|
94
172
|
}
|
|
95
173
|
main().catch((err) => {
|
|
96
|
-
|
|
174
|
+
const msg = String(err?.message || err);
|
|
175
|
+
// bug#4 修:顶层 catch 兜底发 end,防止 os-api 永远等不到终态。
|
|
176
|
+
// 有活 emitter 就用它;没有(比如 extractGlobalFlags/ensureRoot 阶段崩)→ 直接写一行 fallback。
|
|
177
|
+
if (isNdjson()) {
|
|
178
|
+
const active = getActiveEmitter();
|
|
179
|
+
if (active && !active.hasEnded()) {
|
|
180
|
+
active.end(false, 1, 'E_TOPLEVEL', { error: msg });
|
|
181
|
+
}
|
|
182
|
+
else if (!active) {
|
|
183
|
+
// 没有任何 emitter 被注册过:手写一条 end 行
|
|
184
|
+
const fallback = new NdjsonEmitter('unknown');
|
|
185
|
+
fallback.start('top-level error');
|
|
186
|
+
fallback.end(false, 1, 'E_TOPLEVEL', { error: msg });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
error(msg);
|
|
97
190
|
process.exit(1);
|
|
98
191
|
});
|
|
99
192
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { PackageSource, SafePackageVersion } from '../utils/install-safety.js';
|
|
1
2
|
export interface Installer {
|
|
2
3
|
checkDeps(): Promise<void>;
|
|
3
|
-
install(version:
|
|
4
|
+
install(version: SafePackageVersion, packageSource?: PackageSource): Promise<void>;
|
|
4
5
|
configure(config: Record<string, unknown>): Promise<void>;
|
|
6
|
+
uninstall?(): Promise<void>;
|
|
5
7
|
}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { Installer } from './base.js';
|
|
2
|
+
import type { PackageSource } from '../utils/install-safety.js';
|
|
2
3
|
export declare class ChannelInstaller implements Installer {
|
|
3
|
-
private channelName;
|
|
4
|
+
private readonly channelName;
|
|
4
5
|
constructor(channelName: string);
|
|
5
6
|
checkDeps(): Promise<void>;
|
|
6
|
-
install(version: string,
|
|
7
|
+
install(version: string, packageSource?: PackageSource): Promise<void>;
|
|
8
|
+
private verifyInstalled;
|
|
7
9
|
configure(config: Record<string, unknown>): Promise<void>;
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Clean up both filesystem state (extensions/<name>) and openclaw.json state
|
|
12
|
+
* (plugins.entries/installs/allow.<name> + channels.<name>) for this channel,
|
|
13
|
+
* atomically. Partial cleanup — e.g., rm-ing the dir but leaving the JSON refs —
|
|
14
|
+
* leaves openclaw's config validation broken and poisons all subsequent
|
|
15
|
+
* `openclaw ...` commands ("unknown channel id: <name>").
|
|
16
|
+
*/
|
|
17
|
+
private cleanupStaleState;
|
|
18
|
+
private hasJsonRef;
|
|
9
19
|
private installFromLocalPackage;
|
|
10
20
|
/**
|
|
11
21
|
* Download tgz from npm (npmmirror) first, then install locally.
|
|
@@ -13,5 +23,11 @@ export declare class ChannelInstaller implements Installer {
|
|
|
13
23
|
*/
|
|
14
24
|
private installViaNpmPack;
|
|
15
25
|
private addToPluginsAllow;
|
|
26
|
+
/**
|
|
27
|
+
* Push the absolute extension dir into plugins.load.paths so the gateway
|
|
28
|
+
* scans it on startup. Idempotent — dedup against trailing-slash variants
|
|
29
|
+
* (e.g. `/.../dingtalk` vs `/.../dingtalk/` both count as the same entry).
|
|
30
|
+
*/
|
|
31
|
+
private addToLoadPaths;
|
|
16
32
|
private applyConfig;
|
|
17
33
|
}
|
|
@@ -1,37 +1,71 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import {
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { runCommand, runCommandCapture } from '../utils/shell.js';
|
|
3
3
|
import { ensureCommand, checkDiskSpace } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
5
|
+
import { stopDaemonForExclusiveAccess } from '../utils/openclaw-daemon.js';
|
|
5
6
|
import { CHANNEL_NPM_PACKAGES, BUNDLED_PLUGINS, OKCLAW_TMP_DIR, OPENCLAW_HOME, NPM_REGISTRY } from '../utils/constants.js';
|
|
7
|
+
import { assertSafeInstallName, channelExtensionDir, tmpInstallPath } from '../utils/install-safety.js';
|
|
6
8
|
export class ChannelInstaller {
|
|
7
9
|
channelName;
|
|
8
10
|
constructor(channelName) {
|
|
9
|
-
this.channelName = channelName;
|
|
11
|
+
this.channelName = assertSafeInstallName('channel', channelName);
|
|
10
12
|
}
|
|
11
13
|
async checkDeps() {
|
|
12
14
|
await checkDiskSpace(200);
|
|
13
15
|
await ensureCommand('openclaw');
|
|
14
16
|
}
|
|
15
|
-
async install(version,
|
|
17
|
+
async install(version, packageSource) {
|
|
16
18
|
if (BUNDLED_PLUGINS.has(this.channelName)) {
|
|
17
19
|
info(`${this.channelName} is bundled with openclaw, skipping install (config only).`);
|
|
18
20
|
return;
|
|
19
21
|
}
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
// Stop the openclaw gateway daemon before touching extensions/<name> or
|
|
23
|
+
// openclaw.json. The daemon has a file watcher that writes its own metadata
|
|
24
|
+
// back into openclaw.json on every config change, which races with our
|
|
25
|
+
// cleanup/install/configure writes:
|
|
26
|
+
// - rmSync extensions/<name>/node_modules/.cache/jiti vs daemon writing
|
|
27
|
+
// fresh transpile cache → ENOTEMPTY
|
|
28
|
+
// - openclaw plugins install hash check vs daemon reload write →
|
|
29
|
+
// ConfigMutationConflictError: config changed since last load
|
|
30
|
+
// The bootstrap orchestrator (commands/install.ts) is responsible for
|
|
31
|
+
// restarting the daemon after the full component install pipeline finishes.
|
|
32
|
+
await stopDaemonForExclusiveAccess(`${this.channelName} install`);
|
|
33
|
+
// Clean up any stale state (both the extension dir AND config entries) so openclaw's
|
|
34
|
+
// config validation passes when `openclaw plugins install` runs.
|
|
35
|
+
this.cleanupStaleState();
|
|
36
|
+
if (packageSource) {
|
|
37
|
+
await this.installFromLocalPackage(packageSource);
|
|
24
38
|
}
|
|
25
39
|
else {
|
|
26
40
|
await this.installViaNpmPack(version);
|
|
27
41
|
}
|
|
42
|
+
// Verify install actually landed — otherwise configure() would write channels.<name>
|
|
43
|
+
// into openclaw.json against a non-existent plugin and brick the runtime.
|
|
44
|
+
this.verifyInstalled();
|
|
28
45
|
// Add to plugins.allow so openclaw trusts this plugin
|
|
29
46
|
await this.addToPluginsAllow();
|
|
47
|
+
// Add to plugins.load.paths so the gateway actually scans this plugin dir on
|
|
48
|
+
// startup. `openclaw plugins install <tgz>`(archive 模式)只写 plugins.installs
|
|
49
|
+
// metadata,不会自动维护 load.paths;不补这一步会让 gateway ready (0 plugins,...)。
|
|
50
|
+
await this.addToLoadPaths();
|
|
30
51
|
info(`${this.channelName}@${version} installed.`);
|
|
31
52
|
}
|
|
53
|
+
verifyInstalled() {
|
|
54
|
+
const pluginDir = channelExtensionDir(this.channelName);
|
|
55
|
+
if (!existsSync(pluginDir)) {
|
|
56
|
+
throw new Error(`Install verification failed: ${pluginDir} not found after "openclaw plugins install". ` +
|
|
57
|
+
`The install command may have silently skipped due to stale config; aborting before configure() runs.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
32
60
|
async configure(config) {
|
|
33
61
|
if (!config || Object.keys(config).length === 0)
|
|
34
62
|
return;
|
|
63
|
+
// configure() runs N back-to-back `openclaw config set` commands; every one
|
|
64
|
+
// does a hash-checked atomic replace on openclaw.json. If the daemon was
|
|
65
|
+
// restarted between install() and configure() its file-watcher write will
|
|
66
|
+
// race the next config set and raise ConfigMutationConflictError. Re-stop
|
|
67
|
+
// here so configure() sees the same exclusive-access window install() did.
|
|
68
|
+
await stopDaemonForExclusiveAccess(`${this.channelName} configure`);
|
|
35
69
|
// All channel configs go to channels.<name> (both bundled and external plugins)
|
|
36
70
|
// plugins.entries is managed by openclaw plugins install, we don't touch it
|
|
37
71
|
const configPrefix = `channels.${this.channelName}`;
|
|
@@ -40,29 +74,94 @@ export class ChannelInstaller {
|
|
|
40
74
|
info(`${this.channelName} configured.`);
|
|
41
75
|
}
|
|
42
76
|
// ---- private ----
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Clean up both filesystem state (extensions/<name>) and openclaw.json state
|
|
79
|
+
* (plugins.entries/installs/allow.<name> + channels.<name>) for this channel,
|
|
80
|
+
* atomically. Partial cleanup — e.g., rm-ing the dir but leaving the JSON refs —
|
|
81
|
+
* leaves openclaw's config validation broken and poisons all subsequent
|
|
82
|
+
* `openclaw ...` commands ("unknown channel id: <name>").
|
|
83
|
+
*/
|
|
84
|
+
cleanupStaleState() {
|
|
85
|
+
const pluginDir = channelExtensionDir(this.channelName);
|
|
86
|
+
const configFile = `${OPENCLAW_HOME}/openclaw.json`;
|
|
87
|
+
const hadDir = existsSync(pluginDir);
|
|
88
|
+
const hadJsonRef = this.hasJsonRef(configFile);
|
|
89
|
+
if (!hadDir && !hadJsonRef)
|
|
90
|
+
return;
|
|
91
|
+
info(`Cleaning stale state for ${this.channelName} (dir=${hadDir}, jsonRefs=${hadJsonRef})`);
|
|
92
|
+
if (hadJsonRef) {
|
|
93
|
+
try {
|
|
94
|
+
const cfg = JSON.parse(readFileSync(configFile, 'utf8'));
|
|
95
|
+
if (cfg.channels)
|
|
96
|
+
delete cfg.channels[this.channelName];
|
|
97
|
+
if (cfg.plugins?.entries)
|
|
98
|
+
delete cfg.plugins.entries[this.channelName];
|
|
99
|
+
if (cfg.plugins?.installs)
|
|
100
|
+
delete cfg.plugins.installs[this.channelName];
|
|
101
|
+
if (Array.isArray(cfg.plugins?.allow)) {
|
|
102
|
+
cfg.plugins.allow = cfg.plugins.allow.filter((p) => p !== this.channelName);
|
|
103
|
+
}
|
|
104
|
+
// Also strip any plugins.load.paths entry pointing at the channel's
|
|
105
|
+
// extension dir. Without this the dir gets rm'd below but the json keeps
|
|
106
|
+
// a stale reference, so the next `openclaw config validate` (run inside
|
|
107
|
+
// `openclaw plugins install`) fails with "plugin path not found",
|
|
108
|
+
// bricking the install AND every subsequent openclaw config command.
|
|
109
|
+
const pluginPathSuffix = `/extensions/${this.channelName}`;
|
|
110
|
+
if (Array.isArray(cfg.plugins?.load?.paths)) {
|
|
111
|
+
cfg.plugins.load.paths = cfg.plugins.load.paths.filter((p) => (typeof p !== 'string'
|
|
112
|
+
|| (!p.endsWith(pluginPathSuffix) && !p.endsWith(`${pluginPathSuffix}/`))));
|
|
113
|
+
}
|
|
114
|
+
writeFileSync(configFile, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
warn(`Failed to clean openclaw.json: ${e}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (hadDir) {
|
|
47
121
|
rmSync(pluginDir, { recursive: true, force: true });
|
|
48
122
|
}
|
|
49
123
|
}
|
|
50
|
-
|
|
124
|
+
hasJsonRef(configFile) {
|
|
125
|
+
if (!existsSync(configFile))
|
|
126
|
+
return false;
|
|
127
|
+
try {
|
|
128
|
+
const cfg = JSON.parse(readFileSync(configFile, 'utf8'));
|
|
129
|
+
if (cfg.channels?.[this.channelName])
|
|
130
|
+
return true;
|
|
131
|
+
if (cfg.plugins?.entries?.[this.channelName])
|
|
132
|
+
return true;
|
|
133
|
+
if (cfg.plugins?.installs?.[this.channelName])
|
|
134
|
+
return true;
|
|
135
|
+
if (Array.isArray(cfg.plugins?.allow) && cfg.plugins.allow.includes(this.channelName))
|
|
136
|
+
return true;
|
|
137
|
+
// load.paths can leak even when nothing else does — must trigger cleanup
|
|
138
|
+
// so the stale path gets stripped before `openclaw plugins install` runs.
|
|
139
|
+
const pluginPathSuffix = `/extensions/${this.channelName}`;
|
|
140
|
+
if (Array.isArray(cfg.plugins?.load?.paths) && cfg.plugins.load.paths.some((p) => (typeof p === 'string' && (p.endsWith(pluginPathSuffix) || p.endsWith(`${pluginPathSuffix}/`)))))
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// corrupted JSON — let cleanup run anyway
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
async installFromLocalPackage(packageSource) {
|
|
150
|
+
const archive = tmpInstallPath(`${this.channelName}-plugin.tgz`);
|
|
51
151
|
mkdirSync(OKCLAW_TMP_DIR, { recursive: true });
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
await shell(`curl -fsSL --connect-timeout 30 --retry 3 -o "${archive}" "${packageUrl}"`);
|
|
152
|
+
if (packageSource.kind === 'remote') {
|
|
153
|
+
info(`Downloading ${this.channelName} from ${packageSource.url}...`);
|
|
154
|
+
await runCommand('curl', ['-fsSL', '--connect-timeout', '30', '--retry', '3', '-o', archive, packageSource.url]);
|
|
56
155
|
}
|
|
57
|
-
else if (existsSync(
|
|
58
|
-
|
|
156
|
+
else if (existsSync(packageSource.path)) {
|
|
157
|
+
copyFileSync(packageSource.path, archive);
|
|
59
158
|
}
|
|
60
159
|
else {
|
|
61
|
-
throw new Error(`Package not found: ${
|
|
160
|
+
throw new Error(`Package not found: ${packageSource.path}`);
|
|
62
161
|
}
|
|
63
162
|
info(`Installing ${this.channelName} from local package...`);
|
|
64
|
-
await
|
|
65
|
-
|
|
163
|
+
await runCommand('openclaw', ['plugins', 'install', archive]);
|
|
164
|
+
rmSync(archive, { force: true });
|
|
66
165
|
}
|
|
67
166
|
/**
|
|
68
167
|
* Download tgz from npm (npmmirror) first, then install locally.
|
|
@@ -77,17 +176,23 @@ export class ChannelInstaller {
|
|
|
77
176
|
const pkgSpec = `${npmPkg}@${version}`;
|
|
78
177
|
mkdirSync(OKCLAW_TMP_DIR, { recursive: true });
|
|
79
178
|
info(`Downloading ${pkgSpec} from npm...`);
|
|
80
|
-
const packResult = await
|
|
179
|
+
const packResult = await runCommandCapture('npm', ['pack', pkgSpec, '--registry', NPM_REGISTRY], {
|
|
180
|
+
cwd: OKCLAW_TMP_DIR,
|
|
181
|
+
});
|
|
81
182
|
if (packResult.code !== 0) {
|
|
82
183
|
throw new Error(`npm pack failed for ${pkgSpec}: ${packResult.stderr}`);
|
|
83
184
|
}
|
|
84
|
-
const
|
|
185
|
+
const tgzName = packResult.stdout.split('\n').map((line) => line.trim()).filter(Boolean).at(-1);
|
|
186
|
+
if (!tgzName) {
|
|
187
|
+
throw new Error(`npm pack did not report an output file for ${pkgSpec}`);
|
|
188
|
+
}
|
|
189
|
+
const tgzFile = tmpInstallPath(tgzName);
|
|
85
190
|
if (!existsSync(tgzFile)) {
|
|
86
191
|
throw new Error(`npm pack did not produce expected file: ${tgzFile}`);
|
|
87
192
|
}
|
|
88
193
|
info(`Installing ${this.channelName} from ${tgzFile}...`);
|
|
89
|
-
await
|
|
90
|
-
|
|
194
|
+
await runCommand('openclaw', ['plugins', 'install', tgzFile]);
|
|
195
|
+
rmSync(tgzFile, { force: true });
|
|
91
196
|
}
|
|
92
197
|
async addToPluginsAllow() {
|
|
93
198
|
const configFile = `${OPENCLAW_HOME}/openclaw.json`;
|
|
@@ -109,6 +214,39 @@ export class ChannelInstaller {
|
|
|
109
214
|
warn(`Failed to update plugins.allow: ${e}`);
|
|
110
215
|
}
|
|
111
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Push the absolute extension dir into plugins.load.paths so the gateway
|
|
219
|
+
* scans it on startup. Idempotent — dedup against trailing-slash variants
|
|
220
|
+
* (e.g. `/.../dingtalk` vs `/.../dingtalk/` both count as the same entry).
|
|
221
|
+
*/
|
|
222
|
+
async addToLoadPaths() {
|
|
223
|
+
const configFile = `${OPENCLAW_HOME}/openclaw.json`;
|
|
224
|
+
if (!existsSync(configFile))
|
|
225
|
+
return;
|
|
226
|
+
const pluginPath = `${OPENCLAW_HOME}/extensions/${this.channelName}`;
|
|
227
|
+
const stripTrailingSlash = (p) => p.replace(/\/+$/, '');
|
|
228
|
+
const targetNormalized = stripTrailingSlash(pluginPath);
|
|
229
|
+
try {
|
|
230
|
+
const cfg = JSON.parse(readFileSync(configFile, 'utf8'));
|
|
231
|
+
if (!cfg.plugins)
|
|
232
|
+
cfg.plugins = {};
|
|
233
|
+
if (!cfg.plugins.load)
|
|
234
|
+
cfg.plugins.load = {};
|
|
235
|
+
if (!Array.isArray(cfg.plugins.load.paths))
|
|
236
|
+
cfg.plugins.load.paths = [];
|
|
237
|
+
const exists = cfg.plugins.load.paths.some((p) => (typeof p === 'string' && stripTrailingSlash(p) === targetNormalized));
|
|
238
|
+
if (exists) {
|
|
239
|
+
info(`plugins.load.paths already contains ${pluginPath}, skipping write`);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
cfg.plugins.load.paths.push(pluginPath);
|
|
243
|
+
writeFileSync(configFile, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
|
|
244
|
+
info(`Added ${pluginPath} to plugins.load.paths`);
|
|
245
|
+
}
|
|
246
|
+
catch (e) {
|
|
247
|
+
warn(`Failed to update plugins.load.paths: ${e}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
112
250
|
async applyConfig(obj, prefix) {
|
|
113
251
|
for (const [key, value] of Object.entries(obj)) {
|
|
114
252
|
if (value === null || value === undefined)
|
|
@@ -118,10 +256,12 @@ export class ChannelInstaller {
|
|
|
118
256
|
await this.applyConfig(value, path);
|
|
119
257
|
}
|
|
120
258
|
else {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
259
|
+
const isJsonValue = Array.isArray(value);
|
|
260
|
+
// Let errors propagate — silently skipping a config set leaves openclaw.json
|
|
261
|
+
// in a half-written state that breaks config validation at runtime.
|
|
262
|
+
await runCommand('openclaw', isJsonValue
|
|
263
|
+
? ['config', 'set', path, JSON.stringify(value), '--strict-json']
|
|
264
|
+
: ['config', 'set', path, '--', String(value)]);
|
|
125
265
|
}
|
|
126
266
|
}
|
|
127
267
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/installers/channel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/installers/channel.ts"],"names":[],"mappings":"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"}
|