@okclaw-build/cli 1.0.0-beta.2 → 1.0.0-beta.20
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 +34 -9
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/service.js +48 -11
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/show.d.ts +13 -0
- package/dist/commands/show.js +49 -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 +93 -7
- 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 +73 -8
- 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 +1 -0
- package/dist/installers/skill.js +17 -4
- 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 +7 -0
- package/dist/utils/mirror.js.map +1 -1
- 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
|
@@ -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,17 +20,27 @@ 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`);
|
|
27
27
|
await shell(`cd $(npm root -g)/openclaw && npm rebuild --no-audit --no-fund 2>&1 || true`);
|
|
28
|
-
//
|
|
29
|
-
|
|
28
|
+
// Initialize openclaw non-interactively. Replaces an older
|
|
29
|
+
// `openclaw config set gateway.mode local` call that targeted a config key
|
|
30
|
+
// removed in current openclaw — the silent catch was hiding the failure and
|
|
31
|
+
// leaving gateway in a half-configured state that kept asking for device pairing.
|
|
32
|
+
info('Initializing openclaw (non-interactive)...');
|
|
33
|
+
// openclaw 要求 headless 调用显式承认风险(默认模式,不锁定 local/remote)。
|
|
34
|
+
// 见 https://docs.openclaw.ai/security
|
|
35
|
+
// --skip-health:此时 gateway daemon 还没安装(紧接着 gateway install --force 会做),
|
|
36
|
+
// onboard 自带的健康检查必定失败,跳过即可。
|
|
37
|
+
await shell('openclaw onboard --non-interactive --accept-risk --skip-health');
|
|
30
38
|
info('Registering openclaw gateway as system service...');
|
|
31
|
-
await shell('openclaw gateway install --force').catch(() => {
|
|
32
|
-
warn(
|
|
39
|
+
await shell('openclaw gateway install --force').catch((e) => {
|
|
40
|
+
warn(`gateway install skipped (may not be supported on this platform): ${e}`);
|
|
33
41
|
});
|
|
42
|
+
// 注:restart 由 NativeBootstrapRunner 生成的 bootstrap 脚本 Step 6 调 `okclaw restart`
|
|
43
|
+
// 完成(→ service.ts:44 → `openclaw gateway restart`),这里不再重复。
|
|
34
44
|
info(`openclaw@${version} installed.`);
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
@@ -100,5 +110,60 @@ export class OpenclawInstaller {
|
|
|
100
110
|
}
|
|
101
111
|
info('openclaw configured.');
|
|
102
112
|
}
|
|
113
|
+
async uninstall() {
|
|
114
|
+
info('Stopping openclaw...');
|
|
115
|
+
// okclaw command may not exist (CLI early state), tolerate
|
|
116
|
+
await shell(`okclaw stop 2>/dev/null || true`).catch(() => { });
|
|
117
|
+
// 先让 openclaw 自己卸掉 systemd user unit(stop + disable + 删 .service 文件),
|
|
118
|
+
// 否则 pkill + npm uninstall 只删二进制,service 文件留着仍指向旧路径,新版装完
|
|
119
|
+
// systemd 会在旧 ExecStart 上无限 restart 直到下次手工 restart。
|
|
120
|
+
await shell(`openclaw gateway uninstall 2>/dev/null || true`).catch(() => { });
|
|
121
|
+
// pkill 模式必须含路径分隔符 "/openclaw/",否则会匹配到
|
|
122
|
+
// 当前正在执行 uninstall 的 CLI 进程本身(其 argv 里有 "openclaw" 字样),
|
|
123
|
+
// 自杀导致后续 npm uninstall / rm 未执行。
|
|
124
|
+
await shell(`pkill -9 -f '/openclaw/' 2>/dev/null || true`).catch(() => { });
|
|
125
|
+
// 多 package manager 容忍:主机可能用 npm / pnpm / yarn 任一装过 openclaw,
|
|
126
|
+
// 没装的包管理器跑也 tolerate,各自清各自的 store。
|
|
127
|
+
// 见 P5 真机排障:测试主机 which openclaw 指向 /root/.local/share/pnpm/openclaw,
|
|
128
|
+
// 单跑 npm uninstall 清不掉 pnpm 位置 → verifier 在 sudo 下(PATH 不含 pnpm bin)
|
|
129
|
+
// 假阴性通过,但用户 shell 仍能跑。
|
|
130
|
+
info('Uninstalling openclaw via known package managers (best-effort)...');
|
|
131
|
+
await shell(`npm uninstall -g openclaw --no-audit --no-fund 2>/dev/null || true`).catch(() => { });
|
|
132
|
+
await shell(`pnpm rm -g openclaw 2>/dev/null || true`).catch(() => { });
|
|
133
|
+
await shell(`yarn global remove openclaw 2>/dev/null || true`).catch(() => { });
|
|
134
|
+
// `openclaw gateway install --force`(bootstrap 脚本 Step 6)会把 openclaw 二进制
|
|
135
|
+
// symlink 到 /usr/local/bin/openclaw 作为 gateway 的 PATH 入口——这一层由 openclaw
|
|
136
|
+
// 二进制自己写,不受 npm uninstall 管辖。
|
|
137
|
+
await shell(`rm -f /usr/local/bin/openclaw 2>/dev/null || true`).catch(() => { });
|
|
138
|
+
// 兜底扫描:用增广 PATH(涵盖 pnpm / yarn / user-local / nvm 各全局 bin)跑
|
|
139
|
+
// command -v 定位任意残留,循环 rm 直到找不到。覆盖:
|
|
140
|
+
// - sudo secure_path 剔除了 ~/.local/share/pnpm 导致 verifier 假阴性
|
|
141
|
+
// - symlink 链(bin → 真文件 → 再有一层 symlink)
|
|
142
|
+
// - 未来新增 pm 装到新位置(npm cache / corepack 等)
|
|
143
|
+
const PATH_AUG = '/usr/local/bin:/usr/bin:/bin:/root/.local/share/pnpm:/root/.yarn/bin:/root/.local/bin';
|
|
144
|
+
info('Scanning & removing any leftover openclaw binaries...');
|
|
145
|
+
for (let i = 0; i < 3; i++) {
|
|
146
|
+
const scan = await shellCapture(`PATH="${PATH_AUG}:$PATH" command -v openclaw || true`);
|
|
147
|
+
const leftover = (scan.stdout ?? '').trim();
|
|
148
|
+
if (!leftover)
|
|
149
|
+
break;
|
|
150
|
+
info(` found leftover: ${leftover}, removing`);
|
|
151
|
+
// 命令里路径用单引号包住,防空格 / 特殊字符;内部 ' 转义成 '\''
|
|
152
|
+
const safe = leftover.replace(/'/g, `'\\''`);
|
|
153
|
+
await shell(`rm -f '${safe}' 2>/dev/null || true`).catch(() => { });
|
|
154
|
+
}
|
|
155
|
+
info('Verifying openclaw fully removed...');
|
|
156
|
+
const check = await shellCapture(`PATH="${PATH_AUG}:$PATH" command -v openclaw || true`);
|
|
157
|
+
const resolvedPath = (check.stdout ?? '').trim();
|
|
158
|
+
if (resolvedPath) {
|
|
159
|
+
throw new Error(`openclaw still found after uninstall: ${resolvedPath}`);
|
|
160
|
+
}
|
|
161
|
+
info(`Removing ${OPENCLAW_HOME}...`);
|
|
162
|
+
rmSync(OPENCLAW_HOME, { recursive: true, force: true });
|
|
163
|
+
if (existsSync(OPENCLAW_HOME)) {
|
|
164
|
+
throw new Error(`${OPENCLAW_HOME} still exists after removal`);
|
|
165
|
+
}
|
|
166
|
+
info('openclaw uninstalled.');
|
|
167
|
+
}
|
|
103
168
|
}
|
|
104
169
|
//# 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":"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,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,aAAa,EAAE,eAAe,EAAE,eAAe,EAC/C,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAClD,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAC7C,WAAW,EAAE,eAAe,EAAE,qBAAqB,EACnD,gCAAgC,EAAE,gCAAgC,GACnE,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAmB;IAC9B,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,yCAAyC;QACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEzC,+CAA+C;QAC/C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,gEAAgE;QAChE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,0CAA0C;QAC1C,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,IAAI,CAAC,cAAc,OAAO,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAA+B;QAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7C,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAE5C,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,eAAe,EAAE,GAAG,iBAAiB,YAAY,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,qEAAqE;QACrE,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,GAAG;gBACd,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;gBACxC,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;aACxC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG;gBACf,SAAS,EAAE,GAAG,eAAe,OAAO;gBACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;gBACnE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;aACvF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,sDAAsD;gBAC9D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,iBAAiB,EAAE,UAAU;aAChF,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,eAAe,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,oBAAoB;IAEZ,KAAK,CAAC,oBAAoB,CAAC,OAAe;QAChD,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAG,sCAAsC,aAAa,mBAAmB,gBAAgB,EAAE,CAAC;QACzG,MAAM,OAAO,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC;QAE/E,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,OAAO,IAAI,OAAO,OAAO,CAAC,CAAC;QAC5D,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACzF,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,OAAO,4BAA4B,OAAO,OAAO,CAAC,CAAC;YACpF,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,8BAA8B,CAAC;QAC/C,MAAM,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC,GAAG,OAAO,gCAAgC,aAAa,mBAAmB,gBAAgB,IAAI,OAAO,EAAE,CAAC,CAAC;QACrH,MAAM,KAAK,CAAC,UAAU,OAAO,+DAA+D,CAAC,CAAC;QAC9F,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAAC,OAAe;QAC9C,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAEzD,sCAAsC;QACtC,MAAM,GAAG,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,GAAG,WAAW,IAAI,eAAe,IAAI,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAEpF,MAAM,SAAS,GAAG,GAAG,aAAa,wBAAwB,CAAC;QAC3D,MAAM,UAAU,GAAG,GAAG,SAAS,YAAY,OAAO,CAAC,GAAG,EAAE,CAAC;QAEzD,wCAAwC;QACxC,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,0BAA0B;QAC1B,KAAK,MAAM,IAAI,IAAI,gCAAgC,EAAE,CAAC;YACpD,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,iDAAiD,UAAU,IAAI,IAAI,MAAM,OAAO,IAAI,IAAI,QAAQ,CAAC,CAAC;YAC/H,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACjB,2CAA2C;gBAC3C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,MAAM,WAAW,GAAG,GAAG,WAAW,IAAI,eAAe,SAAS,qBAAqB,IAAI,IAAI,EAAE,CAAC;oBAC9F,IAAI,CAAC,cAAc,IAAI,sBAAsB,CAAC,CAAC;oBAC/C,MAAM,KAAK,CAAC,iDAAiD,UAAU,IAAI,IAAI,MAAM,WAAW,GAAG,CAAC,CAAC;gBACvG,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,KAAK,MAAM,IAAI,IAAI,gCAAgC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,iDAAiD,UAAU,IAAI,IAAI,MAAM,OAAO,IAAI,IAAI,QAAQ,CAAC,CAAC;YAC/H,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACjB,kBAAkB;gBAClB,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,MAAM,YAAY,CAAC,uCAAuC,UAAU,IAAI,IAAI,MAAM,WAAW,IAAI,eAAe,SAAS,qBAAqB,IAAI,IAAI,QAAQ,CAAC,CAAC;gBAClK,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC,OAAO,UAAU,+DAA+D,YAAY,EAAE,CAAC,CAAC;QAE5G,iCAAiC;QACjC,MAAM,KAAK,CAAC,OAAO,UAAU,MAAM,SAAS,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QAChD,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,GAAG,aAAa,wBAAwB,CAAC;QAC3D,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,+BAA+B,CAAC;YAChD,MAAM,KAAK,CAAC,iDAAiD,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC;YACzF,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,aAAa,OAAO,SAAS,SAAS,mDAAmD,OAAO,SAAS,SAAS,GAAG,CAAC,CAAC;YACnI,MAAM,KAAK,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,aAAa,UAAU,SAAS,SAAS,mDAAmD,UAAU,SAAS,SAAS,GAAG,CAAC,CAAC;QAC3I,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,UAAU,CAAC,GAAG,SAAS,eAAe,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC,OAAO,SAAS,+DAA+D,YAAY,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAA2B;YACvC,wCAAwC,EAAE,OAAO;YACjD,8CAA8C,EAAE,eAAe;YAC/D,wCAAwC,EAAE,MAAM,CAAC,eAAe,CAAC;YACjE,6BAA6B,EAAE,YAAY;SAC5C,CAAC;QAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,MAAM,KAAK,CAAC,uBAAuB,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC9D,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,UAAU,GAAG,GAAG,aAAa,gBAAgB,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG;YACd,qEAAqE;YACrE,0BAA0B,eAAe,EAAE;YAC3C,4BAA4B,eAAe,EAAE;YAC7C,8BAA8B,eAAe,OAAO;YACpD,6BAA6B,eAAe,WAAW;YACvD,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,aAAa,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;IACpC,CAAC;CACF"}
|
package/dist/installers/skill.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
|
-
import { shell } from '../utils/shell.js';
|
|
2
|
+
import { shell, shellCapture } from '../utils/shell.js';
|
|
3
3
|
import { checkDiskSpace, ensureCommand } from '../utils/deps.js';
|
|
4
|
-
import { info } from '../utils/logger.js';
|
|
4
|
+
import { info, warn } from '../utils/logger.js';
|
|
5
5
|
import { OKCLAW_TMP_DIR, OPENCLAW_WORKSPACE } from '../utils/constants.js';
|
|
6
6
|
const SKILLS_DIR = `${OPENCLAW_WORKSPACE}/skills`;
|
|
7
7
|
export class SkillInstaller {
|
|
@@ -37,10 +37,13 @@ export class SkillInstaller {
|
|
|
37
37
|
info(`Overwriting existing skill at ${skillDir}...`);
|
|
38
38
|
rmSync(skillDir, { recursive: true, force: true });
|
|
39
39
|
}
|
|
40
|
-
// Extract
|
|
40
|
+
// Extract (unzip exit code 1 = warning, files still extracted OK)
|
|
41
41
|
mkdirSync(skillDir, { recursive: true });
|
|
42
42
|
info(`Extracting skill to ${skillDir}...`);
|
|
43
|
-
await
|
|
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
|
+
}
|
|
44
47
|
// Cleanup
|
|
45
48
|
await shell(`rm -f "${archive}"`).catch(() => { });
|
|
46
49
|
info(`Skill ${this.skillName} installed at ${skillDir}`);
|
|
@@ -48,5 +51,15 @@ export class SkillInstaller {
|
|
|
48
51
|
async configure(_config) {
|
|
49
52
|
// Skills don't need extra configuration
|
|
50
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
|
+
}
|
|
51
64
|
}
|
|
52
65
|
//# sourceMappingURL=skill.js.map
|
|
@@ -1 +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,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/installers/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 输出模式全局状态。index.ts 解析 --output / --op-id 后注入;
|
|
3
|
+
* ndjson.ts 与 logger.ts 读取以决定行为。
|
|
4
|
+
*/
|
|
5
|
+
export type OutputMode = 'text' | 'ndjson';
|
|
6
|
+
export declare function setOutputMode(mode: OutputMode, opId?: string): void;
|
|
7
|
+
export declare function setNdjsonPath(path: string | undefined): void;
|
|
8
|
+
export declare function getOutputMode(): OutputMode;
|
|
9
|
+
export declare function getOpId(): string | undefined;
|
|
10
|
+
export declare function getNdjsonPath(): string | undefined;
|
|
11
|
+
export declare function isNdjson(): boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 输出模式全局状态。index.ts 解析 --output / --op-id 后注入;
|
|
3
|
+
* ndjson.ts 与 logger.ts 读取以决定行为。
|
|
4
|
+
*/
|
|
5
|
+
let currentMode = 'text';
|
|
6
|
+
let currentOpId;
|
|
7
|
+
let currentNdjsonPath;
|
|
8
|
+
export function setOutputMode(mode, opId) {
|
|
9
|
+
currentMode = mode;
|
|
10
|
+
currentOpId = opId;
|
|
11
|
+
}
|
|
12
|
+
export function setNdjsonPath(path) {
|
|
13
|
+
currentNdjsonPath = path;
|
|
14
|
+
}
|
|
15
|
+
export function getOutputMode() {
|
|
16
|
+
return currentMode;
|
|
17
|
+
}
|
|
18
|
+
export function getOpId() {
|
|
19
|
+
return currentOpId;
|
|
20
|
+
}
|
|
21
|
+
export function getNdjsonPath() {
|
|
22
|
+
return currentNdjsonPath;
|
|
23
|
+
}
|
|
24
|
+
export function isNdjson() {
|
|
25
|
+
return currentMode === 'ndjson';
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/output/mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,IAAI,WAAW,GAAe,MAAM,CAAC;AACrC,IAAI,WAA+B,CAAC;AACpC,IAAI,iBAAqC,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,IAAa;IAC3D,WAAW,GAAG,IAAI,CAAC;IACnB,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,WAAW,KAAK,QAAQ,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Envelope 字段说明见 docs/superpowers/specs/2026-04-19-host-operation-refactor-design.md
|
|
3
|
+
* §okclaw-cli ndjson 输出契约。
|
|
4
|
+
*/
|
|
5
|
+
export type OpPhase = 'start' | 'step_start' | 'progress' | 'step_done' | 'log' | 'end';
|
|
6
|
+
export type Level = 'debug' | 'info' | 'warn' | 'error';
|
|
7
|
+
export interface NdjsonEvent {
|
|
8
|
+
ts: string;
|
|
9
|
+
seq: number;
|
|
10
|
+
op: string;
|
|
11
|
+
phase: OpPhase;
|
|
12
|
+
step?: string;
|
|
13
|
+
level: Level;
|
|
14
|
+
progress?: number;
|
|
15
|
+
msg?: string;
|
|
16
|
+
fields?: Record<string, unknown>;
|
|
17
|
+
code?: string;
|
|
18
|
+
}
|
|
19
|
+
export type NdjsonWriter = (line: string) => void;
|
|
20
|
+
/**
|
|
21
|
+
* 单 op 的事件发射器。在 text 模式下所有方法都是 no-op;ndjson 模式才写出。
|
|
22
|
+
*
|
|
23
|
+
* 约定:
|
|
24
|
+
* - seq 单调递增,同一 emitter 实例内唯一
|
|
25
|
+
* - end() 只能发一次,重复调用忽略
|
|
26
|
+
* - 非正常退出(exception/signal)由 registerExitHandlers 兜底补 end
|
|
27
|
+
*/
|
|
28
|
+
export declare class NdjsonEmitter {
|
|
29
|
+
private seq;
|
|
30
|
+
private readonly op;
|
|
31
|
+
private readonly writer;
|
|
32
|
+
private ended;
|
|
33
|
+
constructor(op: string, writer?: NdjsonWriter);
|
|
34
|
+
start(msg?: string, fields?: Record<string, unknown>): void;
|
|
35
|
+
stepStart(step: string, msg: string, fields?: Record<string, unknown>): void;
|
|
36
|
+
progress(step: string, progress: number, msg?: string, fields?: Record<string, unknown>): void;
|
|
37
|
+
stepDone(step: string, msg: string, fields?: Record<string, unknown>): void;
|
|
38
|
+
/**
|
|
39
|
+
* 通用日志事件。走独立 phase="log"(bug#7 修:之前借用 phase="progress" 会
|
|
40
|
+
* 污染"取 max(progress) 作为当前进度"的聚合逻辑)。用 level 区分严重度。
|
|
41
|
+
*/
|
|
42
|
+
log(level: Level, msg: string, fields?: Record<string, unknown>): void;
|
|
43
|
+
/**
|
|
44
|
+
* 终态事件;必发。ok=false 时 fields 里加 errorCode(可选)。
|
|
45
|
+
* end 事件的 fields 可承载 op-specific 返回值(如 FILE_READ 的 content)。
|
|
46
|
+
*/
|
|
47
|
+
end(ok: boolean, exitCode: number, code?: string, fields?: Record<string, unknown>): void;
|
|
48
|
+
hasEnded(): boolean;
|
|
49
|
+
private emit;
|
|
50
|
+
}
|
|
51
|
+
export declare function getActiveEmitter(): NdjsonEmitter | null;
|
|
52
|
+
export declare function clearActiveEmitter(): void;
|
|
53
|
+
/**
|
|
54
|
+
* 注册进程兜底,确保 ndjson 模式下 end 事件必发(plan P1 风险:忘 flush → os-api 卡死)。
|
|
55
|
+
* 只在 ndjson 模式生效。
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerExitHandlers(emitter: NdjsonEmitter): void;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { appendFileSync } from 'node:fs';
|
|
2
|
+
import { getNdjsonPath, getOpId, isNdjson } from './mode.js';
|
|
3
|
+
const defaultWriter = (line) => {
|
|
4
|
+
const path = getNdjsonPath();
|
|
5
|
+
if (path) {
|
|
6
|
+
appendFileSync(path, line);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
process.stdout.write(line);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 单 op 的事件发射器。在 text 模式下所有方法都是 no-op;ndjson 模式才写出。
|
|
14
|
+
*
|
|
15
|
+
* 约定:
|
|
16
|
+
* - seq 单调递增,同一 emitter 实例内唯一
|
|
17
|
+
* - end() 只能发一次,重复调用忽略
|
|
18
|
+
* - 非正常退出(exception/signal)由 registerExitHandlers 兜底补 end
|
|
19
|
+
*/
|
|
20
|
+
export class NdjsonEmitter {
|
|
21
|
+
seq = 0;
|
|
22
|
+
op;
|
|
23
|
+
writer;
|
|
24
|
+
ended = false;
|
|
25
|
+
constructor(op, writer = defaultWriter) {
|
|
26
|
+
this.op = op;
|
|
27
|
+
this.writer = writer;
|
|
28
|
+
}
|
|
29
|
+
start(msg = '', fields) {
|
|
30
|
+
this.emit('start', 'info', { msg, fields });
|
|
31
|
+
}
|
|
32
|
+
stepStart(step, msg, fields) {
|
|
33
|
+
this.emit('step_start', 'info', { step, msg, fields });
|
|
34
|
+
}
|
|
35
|
+
progress(step, progress, msg, fields) {
|
|
36
|
+
const clamped = Number.isFinite(progress) ? Math.max(0, Math.min(1, progress)) : undefined;
|
|
37
|
+
this.emit('progress', 'info', { step, progress: clamped, msg, fields });
|
|
38
|
+
}
|
|
39
|
+
stepDone(step, msg, fields) {
|
|
40
|
+
this.emit('step_done', 'info', { step, msg, fields });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 通用日志事件。走独立 phase="log"(bug#7 修:之前借用 phase="progress" 会
|
|
44
|
+
* 污染"取 max(progress) 作为当前进度"的聚合逻辑)。用 level 区分严重度。
|
|
45
|
+
*/
|
|
46
|
+
log(level, msg, fields) {
|
|
47
|
+
this.emit('log', level, { msg, fields });
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 终态事件;必发。ok=false 时 fields 里加 errorCode(可选)。
|
|
51
|
+
* end 事件的 fields 可承载 op-specific 返回值(如 FILE_READ 的 content)。
|
|
52
|
+
*/
|
|
53
|
+
end(ok, exitCode, code, fields) {
|
|
54
|
+
if (this.ended)
|
|
55
|
+
return;
|
|
56
|
+
this.ended = true;
|
|
57
|
+
const mergedFields = { ok, exitCode, ...(fields ?? {}) };
|
|
58
|
+
this.emit('end', ok ? 'info' : 'error', {
|
|
59
|
+
msg: ok ? 'success' : 'failed',
|
|
60
|
+
fields: mergedFields,
|
|
61
|
+
code,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
hasEnded() {
|
|
65
|
+
return this.ended;
|
|
66
|
+
}
|
|
67
|
+
emit(phase, level, partial) {
|
|
68
|
+
if (!isNdjson())
|
|
69
|
+
return;
|
|
70
|
+
const opId = getOpId();
|
|
71
|
+
const userFields = { ...(partial.fields ?? {}) };
|
|
72
|
+
if (opId !== undefined && userFields.opId === undefined) {
|
|
73
|
+
userFields.opId = opId;
|
|
74
|
+
}
|
|
75
|
+
const event = {
|
|
76
|
+
ts: new Date().toISOString(),
|
|
77
|
+
seq: ++this.seq,
|
|
78
|
+
op: this.op,
|
|
79
|
+
phase,
|
|
80
|
+
level,
|
|
81
|
+
};
|
|
82
|
+
if (partial.step !== undefined)
|
|
83
|
+
event.step = partial.step;
|
|
84
|
+
if (partial.progress !== undefined)
|
|
85
|
+
event.progress = partial.progress;
|
|
86
|
+
if (partial.msg !== undefined && partial.msg !== '')
|
|
87
|
+
event.msg = partial.msg;
|
|
88
|
+
if (Object.keys(userFields).length > 0)
|
|
89
|
+
event.fields = userFields;
|
|
90
|
+
if (partial.code !== undefined)
|
|
91
|
+
event.code = partial.code;
|
|
92
|
+
this.writer(JSON.stringify(event) + '\n');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// bug#4 修:顶层 main().catch 里也要能拿到活 emitter 发 end 兜底。
|
|
96
|
+
// registerExitHandlers 时把 emitter 挂到 module 级,exposé getActiveEmitter 给 index.ts。
|
|
97
|
+
let activeEmitter = null;
|
|
98
|
+
export function getActiveEmitter() {
|
|
99
|
+
return activeEmitter;
|
|
100
|
+
}
|
|
101
|
+
export function clearActiveEmitter() {
|
|
102
|
+
activeEmitter = null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 注册进程兜底,确保 ndjson 模式下 end 事件必发(plan P1 风险:忘 flush → os-api 卡死)。
|
|
106
|
+
* 只在 ndjson 模式生效。
|
|
107
|
+
*/
|
|
108
|
+
export function registerExitHandlers(emitter) {
|
|
109
|
+
if (!isNdjson())
|
|
110
|
+
return;
|
|
111
|
+
activeEmitter = emitter;
|
|
112
|
+
const finalize = (exitCode, code) => {
|
|
113
|
+
if (!emitter.hasEnded()) {
|
|
114
|
+
emitter.end(false, exitCode, code);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
process.on('uncaughtException', (err) => {
|
|
118
|
+
finalize(1, 'E_UNCAUGHT');
|
|
119
|
+
process.stderr.write(String(err?.stack ?? err) + '\n');
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
122
|
+
process.on('unhandledRejection', (reason) => {
|
|
123
|
+
finalize(1, 'E_UNHANDLED_REJECTION');
|
|
124
|
+
process.stderr.write(String(reason) + '\n');
|
|
125
|
+
process.exit(1);
|
|
126
|
+
});
|
|
127
|
+
process.on('SIGTERM', () => {
|
|
128
|
+
finalize(143, 'E_SIGTERM');
|
|
129
|
+
process.exit(143);
|
|
130
|
+
});
|
|
131
|
+
process.on('SIGINT', () => {
|
|
132
|
+
finalize(130, 'E_SIGINT');
|
|
133
|
+
process.exit(130);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=ndjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../../src/output/ndjson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA0B7D,MAAM,aAAa,GAAiB,CAAC,IAAI,EAAE,EAAE;IAC3C,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,EAAE,CAAC;QACT,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAChB,GAAG,GAAG,CAAC,CAAC;IACC,EAAE,CAAS;IACX,MAAM,CAAe;IAC9B,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,EAAU,EAAE,SAAuB,aAAa;QAC1D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,GAAG,EAAE,EAAE,MAAgC;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,MAAgC;QACnE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,QAAgB,EAAE,GAAY,EAAE,MAAgC;QACrF,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,GAAW,EAAE,MAAgC;QAClE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAY,EAAE,GAAW,EAAE,MAAgC;QAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAW,EAAE,QAAgB,EAAE,IAAa,EAAE,MAAgC;QAChF,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,YAAY,GAA4B,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;YACtC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9B,MAAM,EAAE,YAAY;YACpB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,IAAI,CACV,KAAc,EACd,KAAY,EACZ,OAMC;QAED,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAExB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxD,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK;YACL,KAAK;SACN,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1D,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACtE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE;YAAE,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAC7E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAClE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,oDAAoD;AACpD,kFAAkF;AAClF,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,IAAI,CAAC,QAAQ,EAAE;QAAE,OAAO;IAExB,aAAa,GAAG,OAAO,CAAC;IAExB,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAQ,EAAE;QACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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
|
*/
|