@okclaw-build/cli 1.0.0-beta.1 → 1.0.0-beta.12
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/check.js +1 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/edit.d.ts +2 -7
- package/dist/commands/edit.js +8 -13
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/feed.d.ts +0 -9
- package/dist/commands/feed.js +42 -97
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/install.js +6 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/show.d.ts +11 -0
- package/dist/commands/show.js +27 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/skill.d.ts +1 -0
- package/dist/commands/skill.js +72 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +28 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.js +26 -4
- package/dist/index.js.map +1 -1
- package/dist/installers/base.d.ts +1 -0
- package/dist/installers/channel.d.ts +10 -1
- package/dist/installers/channel.js +69 -8
- package/dist/installers/channel.js.map +1 -1
- package/dist/installers/openclaw.d.ts +1 -0
- package/dist/installers/openclaw.js +27 -4
- package/dist/installers/openclaw.js.map +1 -1
- package/dist/installers/openviking.js +1 -2
- package/dist/installers/openviking.js.map +1 -1
- package/dist/installers/skill.d.ts +9 -0
- package/dist/installers/skill.js +65 -0
- package/dist/installers/skill.js.map +1 -0
- package/dist/utils/constants.d.ts +0 -2
- package/dist/utils/constants.js +1 -4
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/deps.d.ts +0 -5
- package/dist/utils/deps.js +1 -88
- package/dist/utils/deps.js.map +1 -1
- package/package.json +3 -2
|
@@ -4,8 +4,17 @@ export declare class ChannelInstaller implements Installer {
|
|
|
4
4
|
constructor(channelName: string);
|
|
5
5
|
checkDeps(): Promise<void>;
|
|
6
6
|
install(version: string, packageUrl?: string): Promise<void>;
|
|
7
|
+
private verifyInstalled;
|
|
7
8
|
configure(config: Record<string, unknown>): Promise<void>;
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Clean up both filesystem state (extensions/<name>) and openclaw.json state
|
|
11
|
+
* (plugins.entries/installs/allow.<name> + channels.<name>) for this channel,
|
|
12
|
+
* atomically. Partial cleanup — e.g., rm-ing the dir but leaving the JSON refs —
|
|
13
|
+
* leaves openclaw's config validation broken and poisons all subsequent
|
|
14
|
+
* `openclaw ...` commands ("unknown channel id: <name>").
|
|
15
|
+
*/
|
|
16
|
+
private cleanupStaleState;
|
|
17
|
+
private hasJsonRef;
|
|
9
18
|
private installFromLocalPackage;
|
|
10
19
|
/**
|
|
11
20
|
* Download tgz from npm (npmmirror) first, then install locally.
|
|
@@ -17,18 +17,29 @@ export class ChannelInstaller {
|
|
|
17
17
|
info(`${this.channelName} is bundled with openclaw, skipping install (config only).`);
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
//
|
|
21
|
-
|
|
20
|
+
// Clean up any stale state (both the extension dir AND config entries) so openclaw's
|
|
21
|
+
// config validation passes when `openclaw plugins install` runs.
|
|
22
|
+
this.cleanupStaleState();
|
|
22
23
|
if (packageUrl) {
|
|
23
24
|
await this.installFromLocalPackage(packageUrl);
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
27
|
await this.installViaNpmPack(version);
|
|
27
28
|
}
|
|
29
|
+
// Verify install actually landed — otherwise configure() would write channels.<name>
|
|
30
|
+
// into openclaw.json against a non-existent plugin and brick the runtime.
|
|
31
|
+
this.verifyInstalled();
|
|
28
32
|
// Add to plugins.allow so openclaw trusts this plugin
|
|
29
33
|
await this.addToPluginsAllow();
|
|
30
34
|
info(`${this.channelName}@${version} installed.`);
|
|
31
35
|
}
|
|
36
|
+
verifyInstalled() {
|
|
37
|
+
const pluginDir = `${OPENCLAW_HOME}/extensions/${this.channelName}`;
|
|
38
|
+
if (!existsSync(pluginDir)) {
|
|
39
|
+
throw new Error(`Install verification failed: ${pluginDir} not found after "openclaw plugins install". ` +
|
|
40
|
+
`The install command may have silently skipped due to stale config; aborting before configure() runs.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
32
43
|
async configure(config) {
|
|
33
44
|
if (!config || Object.keys(config).length === 0)
|
|
34
45
|
return;
|
|
@@ -40,13 +51,63 @@ export class ChannelInstaller {
|
|
|
40
51
|
info(`${this.channelName} configured.`);
|
|
41
52
|
}
|
|
42
53
|
// ---- private ----
|
|
43
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Clean up both filesystem state (extensions/<name>) and openclaw.json state
|
|
56
|
+
* (plugins.entries/installs/allow.<name> + channels.<name>) for this channel,
|
|
57
|
+
* atomically. Partial cleanup — e.g., rm-ing the dir but leaving the JSON refs —
|
|
58
|
+
* leaves openclaw's config validation broken and poisons all subsequent
|
|
59
|
+
* `openclaw ...` commands ("unknown channel id: <name>").
|
|
60
|
+
*/
|
|
61
|
+
cleanupStaleState() {
|
|
44
62
|
const pluginDir = `${OPENCLAW_HOME}/extensions/${this.channelName}`;
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
const configFile = `${OPENCLAW_HOME}/openclaw.json`;
|
|
64
|
+
const hadDir = existsSync(pluginDir);
|
|
65
|
+
const hadJsonRef = this.hasJsonRef(configFile);
|
|
66
|
+
if (!hadDir && !hadJsonRef)
|
|
67
|
+
return;
|
|
68
|
+
info(`Cleaning stale state for ${this.channelName} (dir=${hadDir}, jsonRefs=${hadJsonRef})`);
|
|
69
|
+
if (hadJsonRef) {
|
|
70
|
+
try {
|
|
71
|
+
const cfg = JSON.parse(readFileSync(configFile, 'utf8'));
|
|
72
|
+
if (cfg.channels)
|
|
73
|
+
delete cfg.channels[this.channelName];
|
|
74
|
+
if (cfg.plugins?.entries)
|
|
75
|
+
delete cfg.plugins.entries[this.channelName];
|
|
76
|
+
if (cfg.plugins?.installs)
|
|
77
|
+
delete cfg.plugins.installs[this.channelName];
|
|
78
|
+
if (Array.isArray(cfg.plugins?.allow)) {
|
|
79
|
+
cfg.plugins.allow = cfg.plugins.allow.filter((p) => p !== this.channelName);
|
|
80
|
+
}
|
|
81
|
+
writeFileSync(configFile, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
warn(`Failed to clean openclaw.json: ${e}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (hadDir) {
|
|
47
88
|
rmSync(pluginDir, { recursive: true, force: true });
|
|
48
89
|
}
|
|
49
90
|
}
|
|
91
|
+
hasJsonRef(configFile) {
|
|
92
|
+
if (!existsSync(configFile))
|
|
93
|
+
return false;
|
|
94
|
+
try {
|
|
95
|
+
const cfg = JSON.parse(readFileSync(configFile, 'utf8'));
|
|
96
|
+
if (cfg.channels?.[this.channelName])
|
|
97
|
+
return true;
|
|
98
|
+
if (cfg.plugins?.entries?.[this.channelName])
|
|
99
|
+
return true;
|
|
100
|
+
if (cfg.plugins?.installs?.[this.channelName])
|
|
101
|
+
return true;
|
|
102
|
+
if (Array.isArray(cfg.plugins?.allow) && cfg.plugins.allow.includes(this.channelName))
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// corrupted JSON — let cleanup run anyway
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
50
111
|
async installFromLocalPackage(packageUrl) {
|
|
51
112
|
mkdirSync(OKCLAW_TMP_DIR, { recursive: true });
|
|
52
113
|
const archive = `${OKCLAW_TMP_DIR}/${this.channelName}-plugin.tgz`;
|
|
@@ -119,9 +180,9 @@ export class ChannelInstaller {
|
|
|
119
180
|
}
|
|
120
181
|
else {
|
|
121
182
|
const strVal = String(value).replace(/'/g, "'\\''");
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
});
|
|
183
|
+
// Let errors propagate — silently skipping a config set leaves openclaw.json
|
|
184
|
+
// in a half-written state that breaks config validation at runtime.
|
|
185
|
+
await shell(`openclaw config set '${path}' '${strVal}'`);
|
|
125
186
|
}
|
|
126
187
|
}
|
|
127
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/installers/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3H,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE3C,KAAK,CAAC,SAAS;QACb,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,UAAmB;QAChD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,4DAA4D,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/installers/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, existsSync, cpSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { shell, shellRetry } from '../utils/shell.js';
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, cpSync, mkdirSync, rmSync } from 'node:fs';
|
|
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';
|
|
5
|
-
import { OPENCLAW_HOME, OKCLAW_BACKUP_DIR } from '../utils/constants.js';
|
|
5
|
+
import { OPENCLAW_HOME, OKCLAW_BACKUP_DIR, NPM_REGISTRY } from '../utils/constants.js';
|
|
6
6
|
const OPENCLAW_CONFIG = `${OPENCLAW_HOME}/openclaw.json`;
|
|
7
7
|
export class OpenclawInstaller {
|
|
8
8
|
async checkDeps() {
|
|
@@ -20,7 +20,7 @@ export class OpenclawInstaller {
|
|
|
20
20
|
info(`Installing openclaw@${version}...`);
|
|
21
21
|
// --ignore-scripts: skip postinstall to avoid @matrix-org/matrix-sdk-crypto-nodejs
|
|
22
22
|
// which downloads ~40MB binary from GitHub (blocked/slow in China)
|
|
23
|
-
await shellRetry(`npm install -g openclaw@${version} --
|
|
23
|
+
await shellRetry(`npm install -g openclaw@${version} --registry ${NPM_REGISTRY} --no-audit --no-fund --ignore-scripts`);
|
|
24
24
|
// Remove the problematic postinstall script, then rebuild everything else
|
|
25
25
|
info('Running native module builds...');
|
|
26
26
|
await shell(`rm -f $(npm root -g)/openclaw/node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js 2>/dev/null || true`);
|
|
@@ -100,5 +100,28 @@ export class OpenclawInstaller {
|
|
|
100
100
|
}
|
|
101
101
|
info('openclaw configured.');
|
|
102
102
|
}
|
|
103
|
+
async uninstall() {
|
|
104
|
+
info('Stopping openclaw...');
|
|
105
|
+
// okclaw command may not exist (CLI early state), tolerate
|
|
106
|
+
await shell(`okclaw stop 2>/dev/null || true`).catch(() => { });
|
|
107
|
+
// pkill 模式必须含路径分隔符 "/openclaw/",否则会匹配到
|
|
108
|
+
// 当前正在执行 uninstall 的 CLI 进程本身(其 argv 里有 "openclaw" 字样),
|
|
109
|
+
// 自杀导致后续 npm uninstall / rm 未执行。
|
|
110
|
+
await shell(`pkill -9 -f '/openclaw/' 2>/dev/null || true`).catch(() => { });
|
|
111
|
+
info('Uninstalling openclaw npm package...');
|
|
112
|
+
await shell(`npm uninstall -g openclaw --no-audit --no-fund`);
|
|
113
|
+
info('Verifying npm uninstall...');
|
|
114
|
+
const check = await shellCapture(`command -v openclaw || true`);
|
|
115
|
+
const resolvedPath = (check.stdout ?? '').trim();
|
|
116
|
+
if (resolvedPath) {
|
|
117
|
+
throw new Error(`openclaw still found after uninstall: ${resolvedPath}`);
|
|
118
|
+
}
|
|
119
|
+
info(`Removing ${OPENCLAW_HOME}...`);
|
|
120
|
+
rmSync(OPENCLAW_HOME, { recursive: true, force: true });
|
|
121
|
+
if (existsSync(OPENCLAW_HOME)) {
|
|
122
|
+
throw new Error(`${OPENCLAW_HOME} still exists after removal`);
|
|
123
|
+
}
|
|
124
|
+
info('openclaw uninstalled.');
|
|
125
|
+
}
|
|
103
126
|
}
|
|
104
127
|
//# sourceMappingURL=openclaw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, mkdirSync, existsSync, cpSync, rmSync } from 'node:fs';
|
|
2
2
|
import { shell, shellCapture } from '../utils/shell.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ensureCommand, checkDiskSpace } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
5
5
|
import { OPENCLAW_HOME, OPENVIKING_HOME, OPENVIKING_CONF, OPENVIKING_ENV, OPENVIKING_PORT, OKCLAW_BACKUP_DIR, PIP_INDEX_URL, PIP_TRUSTED_HOST, NPM_REGISTRY, JSDELIVR_GH, OPENVIKING_REPO, OPENVIKING_PLUGIN_DIR, OPENVIKING_PLUGIN_REQUIRED_FILES, OPENVIKING_PLUGIN_OPTIONAL_FILES, } from '../utils/constants.js';
|
|
6
6
|
/**
|
|
@@ -16,7 +16,6 @@ export class OpenvikingInstaller {
|
|
|
16
16
|
async checkDeps() {
|
|
17
17
|
await checkDiskSpace(800);
|
|
18
18
|
await ensureCommand('openclaw');
|
|
19
|
-
await ensurePython();
|
|
20
19
|
}
|
|
21
20
|
async install(version, packageUrl) {
|
|
22
21
|
// --- Step 1: pip install openviking ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openviking.js","sourceRoot":"","sources":["../../src/installers/openviking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE7F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openviking.js","sourceRoot":"","sources":["../../src/installers/openviking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Installer } from './base.js';
|
|
2
|
+
export declare class SkillInstaller implements Installer {
|
|
3
|
+
private skillName;
|
|
4
|
+
constructor(skillName: string);
|
|
5
|
+
checkDeps(): Promise<void>;
|
|
6
|
+
install(_version: string, packageUrl?: string): Promise<void>;
|
|
7
|
+
configure(_config: Record<string, unknown>): Promise<void>;
|
|
8
|
+
uninstall(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
|
+
import { shell, shellCapture } from '../utils/shell.js';
|
|
3
|
+
import { checkDiskSpace, ensureCommand } from '../utils/deps.js';
|
|
4
|
+
import { info, warn } from '../utils/logger.js';
|
|
5
|
+
import { OKCLAW_TMP_DIR, OPENCLAW_WORKSPACE } from '../utils/constants.js';
|
|
6
|
+
const SKILLS_DIR = `${OPENCLAW_WORKSPACE}/skills`;
|
|
7
|
+
export class SkillInstaller {
|
|
8
|
+
skillName;
|
|
9
|
+
constructor(skillName) {
|
|
10
|
+
this.skillName = skillName;
|
|
11
|
+
}
|
|
12
|
+
async checkDeps() {
|
|
13
|
+
await checkDiskSpace(100);
|
|
14
|
+
await ensureCommand('unzip');
|
|
15
|
+
}
|
|
16
|
+
async install(_version, packageUrl) {
|
|
17
|
+
if (!packageUrl) {
|
|
18
|
+
throw new Error('--package-url is required for skill installation');
|
|
19
|
+
}
|
|
20
|
+
mkdirSync(OKCLAW_TMP_DIR, { recursive: true });
|
|
21
|
+
mkdirSync(SKILLS_DIR, { recursive: true });
|
|
22
|
+
const archive = `${OKCLAW_TMP_DIR}/${this.skillName}-skill.zip`;
|
|
23
|
+
// Download
|
|
24
|
+
if (packageUrl.startsWith('http')) {
|
|
25
|
+
info(`Downloading skill ${this.skillName} from ${packageUrl}...`);
|
|
26
|
+
await shell(`curl -fsSL --connect-timeout 30 --retry 3 -o "${archive}" "${packageUrl}"`);
|
|
27
|
+
}
|
|
28
|
+
else if (existsSync(packageUrl)) {
|
|
29
|
+
await shell(`cp "${packageUrl}" "${archive}"`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error(`Package not found: ${packageUrl}`);
|
|
33
|
+
}
|
|
34
|
+
// Remove existing skill directory if present (overwrite)
|
|
35
|
+
const skillDir = `${SKILLS_DIR}/${this.skillName}`;
|
|
36
|
+
if (existsSync(skillDir)) {
|
|
37
|
+
info(`Overwriting existing skill at ${skillDir}...`);
|
|
38
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
39
|
+
}
|
|
40
|
+
// Extract (unzip exit code 1 = warning, files still extracted OK)
|
|
41
|
+
mkdirSync(skillDir, { recursive: true });
|
|
42
|
+
info(`Extracting skill to ${skillDir}...`);
|
|
43
|
+
const unzipResult = await shellCapture(`unzip -o "${archive}" -d "${skillDir}"`);
|
|
44
|
+
if (unzipResult.code > 1) {
|
|
45
|
+
throw new Error(`unzip failed (exit ${unzipResult.code}): ${unzipResult.stderr}`);
|
|
46
|
+
}
|
|
47
|
+
// Cleanup
|
|
48
|
+
await shell(`rm -f "${archive}"`).catch(() => { });
|
|
49
|
+
info(`Skill ${this.skillName} installed at ${skillDir}`);
|
|
50
|
+
}
|
|
51
|
+
async configure(_config) {
|
|
52
|
+
// Skills don't need extra configuration
|
|
53
|
+
}
|
|
54
|
+
async uninstall() {
|
|
55
|
+
const skillDir = `${SKILLS_DIR}/${this.skillName}`;
|
|
56
|
+
if (!existsSync(skillDir)) {
|
|
57
|
+
warn(`Skill ${this.skillName} not found at ${skillDir}, skipping`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
info(`Removing skill ${this.skillName} from ${skillDir}...`);
|
|
61
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
62
|
+
info(`Skill ${this.skillName} uninstalled`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/installers/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3E,MAAM,UAAU,GAAG,GAAG,kBAAkB,SAAS,CAAC;AAElD,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAEzC,KAAK,CAAC,SAAS;QACb,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,UAAmB;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,SAAS,YAAY,CAAC;QAEhE,WAAW;QACX,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,qBAAqB,IAAI,CAAC,SAAS,SAAS,UAAU,KAAK,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC,iDAAiD,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC;QAC3F,CAAC;aAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC,OAAO,UAAU,MAAM,OAAO,GAAG,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,yDAAyD;QACzD,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,iCAAiC,QAAQ,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,kEAAkE;QAClE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,aAAa,OAAO,SAAS,QAAQ,GAAG,CAAC,CAAC;QACjF,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,CAAC,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,UAAU;QACV,MAAM,KAAK,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAgC;QAC9C,wCAAwC;IAC1C,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,iBAAiB,QAAQ,YAAY,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,SAAS,QAAQ,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,cAAc,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -11,8 +11,6 @@ export declare const OPENVIKING_PORT = 1933;
|
|
|
11
11
|
export declare const NODE_MIN_MAJOR = 22;
|
|
12
12
|
export declare const NODE_MIN_MINOR = 16;
|
|
13
13
|
export declare const NODE_INSTALL_VERSION = "22.16.0";
|
|
14
|
-
export declare const PYTHON_MIN_MAJOR = 3;
|
|
15
|
-
export declare const PYTHON_MIN_MINOR = 11;
|
|
16
14
|
export declare const NPM_REGISTRY = "https://registry.npmmirror.com";
|
|
17
15
|
export declare const PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple";
|
|
18
16
|
export declare const PIP_TRUSTED_HOST = "pypi.tuna.tsinghua.edu.cn";
|
package/dist/utils/constants.js
CHANGED
|
@@ -9,13 +9,10 @@ export const OPENVIKING_HOME = '/root/.openviking';
|
|
|
9
9
|
export const OPENVIKING_CONF = `${OPENVIKING_HOME}/ov.conf`;
|
|
10
10
|
export const OPENVIKING_ENV = `${OPENCLAW_HOME}/openviking.env`;
|
|
11
11
|
export const OPENVIKING_PORT = 1933;
|
|
12
|
-
// Version requirements — slightly above official
|
|
13
|
-
// Official: Node >= 22.14, Python >= 3.10
|
|
12
|
+
// Version requirements — slightly above official minimum (Node >= 22.14)
|
|
14
13
|
export const NODE_MIN_MAJOR = 22;
|
|
15
14
|
export const NODE_MIN_MINOR = 16;
|
|
16
15
|
export const NODE_INSTALL_VERSION = '22.16.0';
|
|
17
|
-
export const PYTHON_MIN_MAJOR = 3;
|
|
18
|
-
export const PYTHON_MIN_MINOR = 11;
|
|
19
16
|
// China mirrors
|
|
20
17
|
export const NPM_REGISTRY = 'https://registry.npmmirror.com';
|
|
21
18
|
export const PIP_INDEX_URL = 'https://pypi.tuna.tsinghua.edu.cn/simple';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,SAAS,CAAC;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,SAAS,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,WAAW,MAAM,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,aAAa,YAAY,CAAC;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,eAAe,UAAU,CAAC;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,aAAa,iBAAiB,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,SAAS,CAAC;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,SAAS,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,WAAW,MAAM,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,aAAa,YAAY,CAAC;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,eAAe,UAAU,CAAC;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,aAAa,iBAAiB,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,yEAAyE;AACzE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,0CAA0C,CAAC;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEhE,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,6BAA6B,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAEhE,gDAAgD;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,mBAAmB,EAAE,WAAW,EAAE,oBAAoB;IACtD,mBAAmB,EAAE,eAAe,EAAE,iBAAiB;IACvD,8BAA8B,EAAE,sBAAsB;IACtD,eAAe;CAChB,CAAC;AAEF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,iCAAiC;IACzC,iDAAiD;IACjD,mEAAmE;CACpE,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC"}
|
package/dist/utils/deps.d.ts
CHANGED
|
@@ -3,11 +3,6 @@
|
|
|
3
3
|
* Installs nvm first if not present, then installs Node.js through nvm.
|
|
4
4
|
*/
|
|
5
5
|
export declare function ensureNodeVersion(): Promise<void>;
|
|
6
|
-
/**
|
|
7
|
-
* Ensure Python >= PYTHON_MIN_MAJOR.PYTHON_MIN_MINOR is installed.
|
|
8
|
-
* Auto-installs via system package manager if missing or too old.
|
|
9
|
-
*/
|
|
10
|
-
export declare function ensurePython(): Promise<void>;
|
|
11
6
|
/**
|
|
12
7
|
* Ensure a command exists on PATH.
|
|
13
8
|
*/
|
package/dist/utils/deps.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { shell, shellCapture, commandExists } from './shell.js';
|
|
2
2
|
import { info, warn } from './logger.js';
|
|
3
|
-
import { NODE_MIN_MAJOR, NODE_MIN_MINOR, NODE_INSTALL_VERSION, NODE_MIRROR,
|
|
3
|
+
import { NODE_MIN_MAJOR, NODE_MIN_MINOR, NODE_INSTALL_VERSION, NODE_MIRROR, } from './constants.js';
|
|
4
4
|
/**
|
|
5
5
|
* Ensure Node.js >= NODE_MIN_MAJOR.NODE_MIN_MINOR is installed via nvm.
|
|
6
6
|
* Installs nvm first if not present, then installs Node.js through nvm.
|
|
@@ -55,79 +55,6 @@ async function installNodejs() {
|
|
|
55
55
|
throw new Error('Node.js installation failed: node command not found');
|
|
56
56
|
info(`Node.js ${verify.stdout.trim()} installed via nvm ✓`);
|
|
57
57
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Ensure Python >= PYTHON_MIN_MAJOR.PYTHON_MIN_MINOR is installed.
|
|
60
|
-
* Auto-installs via system package manager if missing or too old.
|
|
61
|
-
*/
|
|
62
|
-
export async function ensurePython() {
|
|
63
|
-
const required = `${PYTHON_MIN_MAJOR}.${PYTHON_MIN_MINOR}`;
|
|
64
|
-
const result = await shellCapture('python3 --version');
|
|
65
|
-
if (result.code === 0) {
|
|
66
|
-
const match = result.stdout.match(/(\d+)\.(\d+)\.?(\d+)?/);
|
|
67
|
-
if (match) {
|
|
68
|
-
const version = `${match[1]}.${match[2]}`;
|
|
69
|
-
if (versionGe(version, required)) {
|
|
70
|
-
info(`Python ${result.stdout.trim()} >= ${required} ✓`);
|
|
71
|
-
await ensurePip();
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
warn(`Python ${version} < ${required}, upgrading...`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
info('Python3 not found, installing...');
|
|
79
|
-
}
|
|
80
|
-
await installPython();
|
|
81
|
-
await ensurePip();
|
|
82
|
-
}
|
|
83
|
-
async function installPython() {
|
|
84
|
-
const required = `${PYTHON_MIN_MAJOR}.${PYTHON_MIN_MINOR}`;
|
|
85
|
-
info(`Installing Python >= ${required}...`);
|
|
86
|
-
if (await commandExists('apt-get')) {
|
|
87
|
-
// Try deadsnakes PPA for newer Python on older Ubuntu
|
|
88
|
-
await shell('apt-get update -qq').catch(() => { });
|
|
89
|
-
await shell('apt-get install -y -qq python3 python3-pip python3-venv python3-dev').catch(async () => {
|
|
90
|
-
info('Trying deadsnakes PPA...');
|
|
91
|
-
await shell('apt-get install -y -qq software-properties-common').catch(() => { });
|
|
92
|
-
await shell('add-apt-repository -y ppa:deadsnakes/ppa').catch(() => { });
|
|
93
|
-
await shell('apt-get update -qq');
|
|
94
|
-
await shell('apt-get install -y -qq python3 python3-pip python3-venv python3-dev');
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
else if (await commandExists('dnf')) {
|
|
98
|
-
await shell('dnf install -y python3 python3-pip python3-devel');
|
|
99
|
-
}
|
|
100
|
-
else if (await commandExists('yum')) {
|
|
101
|
-
await shell('yum install -y python3 python3-pip python3-devel');
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
throw new Error(`Cannot install Python: no supported package manager. Install Python >= ${required} manually.`);
|
|
105
|
-
}
|
|
106
|
-
// Verify
|
|
107
|
-
const verify = await shellCapture('python3 --version');
|
|
108
|
-
if (verify.code !== 0)
|
|
109
|
-
throw new Error('Python installation failed');
|
|
110
|
-
const match = verify.stdout.match(/(\d+)\.(\d+)/);
|
|
111
|
-
if (match && !versionGe(`${match[1]}.${match[2]}`, required)) {
|
|
112
|
-
throw new Error(`Installed Python ${match[1]}.${match[2]} still below ${required}. Install manually.`);
|
|
113
|
-
}
|
|
114
|
-
info(`Python ${verify.stdout.trim()} installed ✓`);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Ensure pip is available.
|
|
118
|
-
*/
|
|
119
|
-
async function ensurePip() {
|
|
120
|
-
const result = await shellCapture('python3 -m pip --version');
|
|
121
|
-
if (result.code === 0)
|
|
122
|
-
return;
|
|
123
|
-
info('pip not found, installing...');
|
|
124
|
-
await shell('curl -fsSL https://bootstrap.pypa.io/get-pip.py | python3').catch(async () => {
|
|
125
|
-
await installSystemPackages(['python3-pip']);
|
|
126
|
-
});
|
|
127
|
-
const verify = await shellCapture('python3 -m pip --version');
|
|
128
|
-
if (verify.code !== 0)
|
|
129
|
-
throw new Error('Failed to install pip');
|
|
130
|
-
}
|
|
131
58
|
/**
|
|
132
59
|
* Ensure a command exists on PATH.
|
|
133
60
|
*/
|
|
@@ -147,20 +74,6 @@ export async function checkDiskSpace(requiredMb) {
|
|
|
147
74
|
}
|
|
148
75
|
}
|
|
149
76
|
// ---- helpers ----
|
|
150
|
-
async function installSystemPackages(packages) {
|
|
151
|
-
if (await commandExists('apt-get')) {
|
|
152
|
-
await shell(`apt-get update -qq && apt-get install -y -qq ${packages.join(' ')}`);
|
|
153
|
-
}
|
|
154
|
-
else if (await commandExists('dnf')) {
|
|
155
|
-
await shell(`dnf install -y ${packages.join(' ')}`);
|
|
156
|
-
}
|
|
157
|
-
else if (await commandExists('yum')) {
|
|
158
|
-
await shell(`yum install -y ${packages.join(' ')}`);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
throw new Error(`Cannot install packages: no supported package manager`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
77
|
function versionGe(a, b) {
|
|
165
78
|
const pa = a.split('.').map(Number);
|
|
166
79
|
const pb = b.split('.').map(Number);
|
package/dist/utils/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/utils/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/utils/deps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@okclaw-build/cli",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.12",
|
|
4
4
|
"description": "OKClaw deployment CLI - install and manage OpenClaw, OpenViking, and channel plugins",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"dev": "tsc --watch",
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
13
|
+
"prepublishOnly": "npm run build",
|
|
14
|
+
"test": "tsc -p tsconfig.test.json && node --test dist-test/tests/**/*.test.js"
|
|
14
15
|
},
|
|
15
16
|
"keywords": ["openclaw", "openviking", "deploy", "cli"],
|
|
16
17
|
"license": "MIT",
|