@okclaw-build/cli 1.0.0-beta.4 → 1.0.0-beta.41
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 +22 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/edit.d.ts +2 -7
- package/dist/commands/edit.js +28 -15
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/feed.d.ts +0 -9
- package/dist/commands/feed.js +80 -103
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/install.js +57 -9
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/service.js +65 -12
- 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 +114 -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 +88 -5
- package/dist/index.js.map +1 -1
- package/dist/installers/base.d.ts +1 -0
- package/dist/installers/channel.d.ts +16 -1
- package/dist/installers/channel.js +139 -8
- package/dist/installers/channel.js.map +1 -1
- package/dist/installers/openclaw.d.ts +15 -0
- package/dist/installers/openclaw.js +171 -8
- 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 +2 -0
- package/dist/installers/skill.js +35 -5
- package/dist/installers/skill.js.map +1 -1
- 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 +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/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 +23 -0
- package/dist/utils/openclaw-daemon.js +38 -0
- package/dist/utils/openclaw-daemon.js.map +1 -0
- package/dist/utils/shell.d.ts +12 -2
- package/dist/utils/shell.js +66 -3
- package/dist/utils/shell.js.map +1 -1
- package/package.json +3 -2
package/dist/utils/shell.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { spawn, execFileSync } from 'node:child_process';
|
|
2
2
|
import { error as logError, info } from './logger.js';
|
|
3
|
+
import { isNdjson } from '../output/mode.js';
|
|
4
|
+
import { getActiveEmitter } from '../output/ndjson.js';
|
|
3
5
|
/**
|
|
4
6
|
* Ensure running as root. If not, re-exec with sudo and exit.
|
|
5
7
|
*/
|
|
@@ -23,16 +25,31 @@ export function ensureRoot() {
|
|
|
23
25
|
// Prefix to source nvm before every shell command so node/npm are on PATH
|
|
24
26
|
const NVM_INIT = 'export HOME=/root; export NVM_DIR=/root/.nvm; [ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"; ';
|
|
25
27
|
/**
|
|
26
|
-
* Run a shell command
|
|
27
|
-
*
|
|
28
|
+
* Run a shell command and wait for exit.
|
|
29
|
+
*
|
|
30
|
+
* text 模式:stdio:inherit,子进程输出直通父进程 TTY(本地交互体验不变)。
|
|
31
|
+
*
|
|
32
|
+
* ndjson 模式:捕获 stdout/stderr 并按行合成 phase="log" 事件(stdout→level=info,
|
|
33
|
+
* stderr→level=warn),通过 {@link getActiveEmitter} 拿到当前 op 的 emitter 发出。
|
|
34
|
+
* 这样像 `npm install` 这种几分钟才回一行 ndjson 的长操作,其实时进度也能通过
|
|
35
|
+
* 事件流推给 os-api / 前端,用户不会看到 UI 卡死 10 分钟。
|
|
36
|
+
*
|
|
37
|
+
* 透传是"尽力而为":emitter 缺失(理论上只有本地脚本直接 import shell() 且没走
|
|
38
|
+
* 正常 command 入口才会发生)时静默吞,不影响命令本身执行。
|
|
39
|
+
*
|
|
28
40
|
* Throws on non-zero exit.
|
|
29
41
|
*/
|
|
30
42
|
export function shell(cmd) {
|
|
31
43
|
return new Promise((resolve, reject) => {
|
|
44
|
+
const ndjson = isNdjson();
|
|
32
45
|
const child = spawn('bash', ['-c', NVM_INIT + cmd], {
|
|
33
|
-
stdio: 'inherit',
|
|
46
|
+
stdio: ndjson ? ['ignore', 'pipe', 'pipe'] : 'inherit',
|
|
34
47
|
env: { ...process.env, HOME: '/root' },
|
|
35
48
|
});
|
|
49
|
+
if (ndjson) {
|
|
50
|
+
forwardStreamAsLogEvents(child, 'stdout', 'info');
|
|
51
|
+
forwardStreamAsLogEvents(child, 'stderr', 'warn');
|
|
52
|
+
}
|
|
36
53
|
child.on('error', reject);
|
|
37
54
|
child.on('close', (code) => {
|
|
38
55
|
if (code === 0)
|
|
@@ -42,6 +59,52 @@ export function shell(cmd) {
|
|
|
42
59
|
});
|
|
43
60
|
});
|
|
44
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* 把子进程的一个输出流按换行切分,每行合成一条 phase="log" ndjson 事件。
|
|
64
|
+
*
|
|
65
|
+
* 实现细节:
|
|
66
|
+
* - 跨 chunk 续行:`buf` 累积未看到 \n 的尾巴,下次 data 再拼
|
|
67
|
+
* - 空行丢弃(避免 npm 输出里的空白行污染事件流)
|
|
68
|
+
* - \r 尾字符剥掉(Windows / 终端控制字符常见)
|
|
69
|
+
* - close 时 flush 尾 buf,防止最后一行没 \n 漏掉
|
|
70
|
+
* - emitter 为空时整段 no-op,绝不抛异常——shell() 的主路径不能因日志透传失败而失败
|
|
71
|
+
*/
|
|
72
|
+
function forwardStreamAsLogEvents(child, streamName, level) {
|
|
73
|
+
const stream = child[streamName];
|
|
74
|
+
if (!stream)
|
|
75
|
+
return;
|
|
76
|
+
let buf = '';
|
|
77
|
+
stream.setEncoding('utf8');
|
|
78
|
+
stream.on('data', (chunk) => {
|
|
79
|
+
buf += chunk;
|
|
80
|
+
let idx = buf.indexOf('\n');
|
|
81
|
+
while (idx >= 0) {
|
|
82
|
+
emitLogLine(buf.slice(0, idx), level);
|
|
83
|
+
buf = buf.slice(idx + 1);
|
|
84
|
+
idx = buf.indexOf('\n');
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
stream.on('close', () => {
|
|
88
|
+
if (buf.length > 0) {
|
|
89
|
+
emitLogLine(buf, level);
|
|
90
|
+
buf = '';
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function emitLogLine(line, level) {
|
|
95
|
+
const cleaned = line.endsWith('\r') ? line.slice(0, -1) : line;
|
|
96
|
+
if (cleaned.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
const emitter = getActiveEmitter();
|
|
99
|
+
if (!emitter)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
emitter.log(level, cleaned);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// log 事件透传失败不能影响命令本身执行;这里静默
|
|
106
|
+
}
|
|
107
|
+
}
|
|
45
108
|
/**
|
|
46
109
|
* Run a shell command with retries.
|
|
47
110
|
*/
|
package/dist/utils/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.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.41",
|
|
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 dist-test/tests/*/*.test.js"
|
|
14
15
|
},
|
|
15
16
|
"keywords": ["openclaw", "openviking", "deploy", "cli"],
|
|
16
17
|
"license": "MIT",
|