@okclaw-build/cli 1.0.0-beta.46 → 1.0.0-beta.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/installers/openclaw.js +5 -0
- package/dist/installers/openclaw.js.map +1 -1
- package/dist/utils/constants.d.ts +5 -3
- package/dist/utils/constants.js +23 -4
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/deps.js +17 -12
- package/dist/utils/deps.js.map +1 -1
- package/package.json +1 -1
- package/README.md +0 -48
- package/dist/commands/migration.d.ts +0 -1
- package/dist/commands/migration.js +0 -205
- package/dist/commands/migration.js.map +0 -1
- package/dist/migration/archive.d.ts +0 -14
- package/dist/migration/archive.js +0 -84
- package/dist/migration/archive.js.map +0 -1
- package/dist/migration/crypto.d.ts +0 -16
- package/dist/migration/crypto.js +0 -56
- package/dist/migration/crypto.js.map +0 -1
- package/dist/migration/manifest.d.ts +0 -39
- package/dist/migration/manifest.js +0 -140
- package/dist/migration/manifest.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -147,7 +147,7 @@ Global flags (before the command):
|
|
|
147
147
|
Components:
|
|
148
148
|
openclaw Core AI Agent framework (npm install)
|
|
149
149
|
openviking Long-term memory plugin (pip + openclaw plugin, needs --package-url)
|
|
150
|
-
dingtalk DingTalk channel (npm: @
|
|
150
|
+
dingtalk DingTalk channel (npm: @soimy/dingtalk)
|
|
151
151
|
feishu Feishu/Lark channel (bundled with OpenClaw, config only)
|
|
152
152
|
wechat WeChat channel (npm: @tencent-weixin/openclaw-weixin)
|
|
153
153
|
s3 S3 IM channel (needs --package-url)
|
|
@@ -167,7 +167,7 @@ Notes:
|
|
|
167
167
|
- All commands auto-elevate to root via sudo if needed
|
|
168
168
|
- All paths are anchored to /root/ (forced HOME=/root)
|
|
169
169
|
- npm uses npmmirror, pip uses tsinghua mirror (China acceleration)
|
|
170
|
-
- Node.js >=
|
|
170
|
+
- Node.js >= 24 (LTS) is auto-installed/upgraded via nvm if missing or too old
|
|
171
171
|
`);
|
|
172
172
|
}
|
|
173
173
|
main().catch((err) => {
|
|
@@ -64,6 +64,11 @@ export class OpenclawInstaller {
|
|
|
64
64
|
await shell('openclaw config set plugins.slots.memory memory-core').catch(() => {
|
|
65
65
|
warn('Failed to set memory slot to memory-core (plugin not registered), continuing...');
|
|
66
66
|
});
|
|
67
|
+
// OKClaw 部署的 OpenClaw 实例不需要主动 agent heartbeat;设为 0m
|
|
68
|
+
// 是持久关闭,必须在 gateway 启动前写入配置。
|
|
69
|
+
await shell('openclaw config set agents.defaults.heartbeat.every "0m"').catch(() => {
|
|
70
|
+
warn('Failed to disable OpenClaw heartbeat, continuing...');
|
|
71
|
+
});
|
|
67
72
|
await shell('openclaw config set tools.profile full');
|
|
68
73
|
info(`openclaw@${version} installed.`);
|
|
69
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,16 @@ export declare const OPENVIKING_HOME = "/root/.openviking";
|
|
|
9
9
|
export declare const OPENVIKING_CONF = "/root/.openviking/ov.conf";
|
|
10
10
|
export declare const OPENVIKING_ENV = "/root/.openclaw/openviking.env";
|
|
11
11
|
export declare const OPENVIKING_PORT = 1933;
|
|
12
|
-
export declare const NODE_MIN_MAJOR =
|
|
13
|
-
export declare const NODE_MIN_MINOR =
|
|
14
|
-
export declare const NODE_INSTALL_VERSION = "
|
|
12
|
+
export declare const NODE_MIN_MAJOR = 24;
|
|
13
|
+
export declare const NODE_MIN_MINOR = 0;
|
|
14
|
+
export declare const NODE_INSTALL_VERSION = "24";
|
|
15
15
|
export declare const NPM_REGISTRY = "https://registry.npmmirror.com";
|
|
16
16
|
export declare const PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple";
|
|
17
17
|
export declare const PIP_TRUSTED_HOST = "pypi.tuna.tsinghua.edu.cn";
|
|
18
18
|
export declare const NODE_MIRROR = "https://npmmirror.com/mirrors/node";
|
|
19
19
|
export declare const JSDELIVR_GH = "https://cdn.jsdelivr.net/gh";
|
|
20
|
+
export declare const NVM_VERSION = "v0.40.3";
|
|
21
|
+
export declare const NVM_SH_SOURCES: string[];
|
|
20
22
|
export declare const OPENVIKING_REPO = "volcengine/OpenViking";
|
|
21
23
|
export declare const OPENVIKING_PLUGIN_DIR = "examples/openclaw-plugin";
|
|
22
24
|
export declare const OPENVIKING_PLUGIN_REQUIRED_FILES: string[];
|
package/dist/utils/constants.js
CHANGED
|
@@ -13,10 +13,16 @@ export const OPENVIKING_HOME = '/root/.openviking';
|
|
|
13
13
|
export const OPENVIKING_CONF = `${OPENVIKING_HOME}/ov.conf`;
|
|
14
14
|
export const OPENVIKING_ENV = `${OPENCLAW_HOME}/openviking.env`;
|
|
15
15
|
export const OPENVIKING_PORT = 1933;
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
// Node baseline — standardize on the current LTS (Node 24, "Krypton").
|
|
17
|
+
// openclaw keeps raising its own minimum over time (e.g. >=22.19), so any
|
|
18
|
+
// host sitting on an older Node makes `openclaw onboard` fail with
|
|
19
|
+
// "Node.js vX is required". Keeping the CLI's floor well ahead means a stale
|
|
20
|
+
// host is auto-upgraded via nvm (see deps.ts) — never a hard error.
|
|
21
|
+
export const NODE_MIN_MAJOR = 24;
|
|
22
|
+
export const NODE_MIN_MINOR = 0;
|
|
23
|
+
// Major-only: nvm resolves the latest 24.x LTS patch at install time, so we
|
|
24
|
+
// pick up security releases without bumping a pinned version here.
|
|
25
|
+
export const NODE_INSTALL_VERSION = '24';
|
|
20
26
|
// China mirrors
|
|
21
27
|
export const NPM_REGISTRY = 'https://registry.npmmirror.com';
|
|
22
28
|
export const PIP_INDEX_URL = 'https://pypi.tuna.tsinghua.edu.cn/simple';
|
|
@@ -24,6 +30,19 @@ export const PIP_TRUSTED_HOST = 'pypi.tuna.tsinghua.edu.cn';
|
|
|
24
30
|
export const NODE_MIRROR = 'https://npmmirror.com/mirrors/node';
|
|
25
31
|
// jsdelivr CDN for GitHub content (works in China, GitHub raw does not)
|
|
26
32
|
export const JSDELIVR_GH = 'https://cdn.jsdelivr.net/gh';
|
|
33
|
+
// nvm install sources. The official install.sh clones/downloads from GitHub
|
|
34
|
+
// (raw.githubusercontent.com / github.com .git) which is unreliable in China,
|
|
35
|
+
// so instead we drop nvm.sh itself directly — a single self-contained file that
|
|
36
|
+
// is enough for `nvm install/use/alias`. jsdelivr serves any repo file and is
|
|
37
|
+
// reachable in China; gitee/github raw are fallbacks. Tried in order, each curl
|
|
38
|
+
// time-bounded, and validated by running `nvm --version` (rejects HTML/redirect
|
|
39
|
+
// bodies that still return 200).
|
|
40
|
+
export const NVM_VERSION = 'v0.40.3';
|
|
41
|
+
export const NVM_SH_SOURCES = [
|
|
42
|
+
`${JSDELIVR_GH}/nvm-sh/nvm@${NVM_VERSION}/nvm.sh`,
|
|
43
|
+
`https://gitee.com/mirrors/nvm/raw/${NVM_VERSION}/nvm.sh`,
|
|
44
|
+
`https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/nvm.sh`,
|
|
45
|
+
];
|
|
27
46
|
export const OPENVIKING_REPO = 'volcengine/OpenViking';
|
|
28
47
|
export const OPENVIKING_PLUGIN_DIR = 'examples/openclaw-plugin';
|
|
29
48
|
// Plugin files to download (same as ov-install)
|
|
@@ -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,0DAA0D;AAC1D,kEAAkE;AAClE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,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,0DAA0D;AAC1D,kEAAkE;AAClE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,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,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,6EAA6E;AAC7E,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC,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;AAEzD,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,iCAAiC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,WAAW,eAAe,WAAW,SAAS;IACjD,qCAAqC,WAAW,SAAS;IACzD,gDAAgD,WAAW,SAAS;CACrE,CAAC;AACF,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.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, } from './constants.js';
|
|
3
|
+
import { NODE_MIN_MAJOR, NODE_MIN_MINOR, NODE_INSTALL_VERSION, NODE_MIRROR, NVM_SH_SOURCES, } 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.
|
|
@@ -31,17 +31,22 @@ async function ensureNvm() {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
info('nvm not found, installing...');
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
// 不跑官方 install.sh:它内部从 GitHub clone/下载,国内不可靠且无超时会卡住部署。
|
|
35
|
+
// 直接把 nvm.sh 本体落到 $NVM_DIR(单文件即可支撑 nvm install/use/alias)。
|
|
36
|
+
// 多源按序尝试,每个 curl 带 --connect-timeout/--max-time 快速失败,并用
|
|
37
|
+
// `nvm --version` 校验真的拿到了可用 nvm(镜像偶发返回重定向/HTML 也是 200)。
|
|
38
|
+
for (const src of NVM_SH_SOURCES) {
|
|
39
|
+
const dl = await shellCapture(`mkdir -p ${NVM_DIR} && curl -fsSL --connect-timeout 10 --max-time 60 '${src}' -o ${NVM_DIR}/nvm.sh`);
|
|
40
|
+
if (dl.code === 0) {
|
|
41
|
+
const verify = await shellCapture('nvm --version');
|
|
42
|
+
if (verify.code === 0) {
|
|
43
|
+
info(`nvm ${verify.stdout.trim()} installed (source: ${src}) ✓`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
warn(`nvm source unavailable, trying next: ${src}`);
|
|
48
|
+
}
|
|
49
|
+
throw new Error('nvm installation failed: all sources unreachable (jsdelivr/gitee/github)');
|
|
45
50
|
}
|
|
46
51
|
async function installNodejs() {
|
|
47
52
|
info(`Installing Node.js ${NODE_INSTALL_VERSION} via nvm...`);
|
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,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/utils/deps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# okclaw-cli
|
|
2
|
-
|
|
3
|
-
> 目标主机上的部署与运维 CLI,用于安装 / 管理 OpenClaw、OpenViking、渠道插件和 Skill。
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
| 项目 | 说明 |
|
|
8
|
-
|------|------|
|
|
9
|
-
| 类型 | Node.js / TypeScript CLI |
|
|
10
|
-
| 包名 | `@okclaw-build/cli` |
|
|
11
|
-
| Node 要求 | `>=22` |
|
|
12
|
-
| 命令入口 | `okclaw` / `bin/okclaw.js` |
|
|
13
|
-
|
|
14
|
-
## 当前命令
|
|
15
|
-
|
|
16
|
-
- `okclaw install <component>`:安装 `openclaw`、`openviking`、`dingtalk`、`feishu`、`wechat`、`s3`。
|
|
17
|
-
- `okclaw uninstall <component>`:卸载组件。
|
|
18
|
-
- `okclaw check`:检查并安装系统依赖。
|
|
19
|
-
- `okclaw start|stop|restart|status`:管理 OpenClaw gateway。
|
|
20
|
-
- `okclaw edit <target> --file <path>`:写入配置文件。
|
|
21
|
-
- `okclaw show <target...>`:读取配置文件;批量读取支持 `--output=ndjson`。
|
|
22
|
-
- `okclaw feed --file <path>`:投喂知识库文件。
|
|
23
|
-
- `okclaw skill install|uninstall`:安装 / 卸载 Skill。
|
|
24
|
-
|
|
25
|
-
全局参数:
|
|
26
|
-
|
|
27
|
-
- `--output text|ndjson`
|
|
28
|
-
- `--op-id <uuid>`
|
|
29
|
-
- `--ndjson-path <path>`
|
|
30
|
-
|
|
31
|
-
## 开发
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
pnpm install
|
|
35
|
-
pnpm build
|
|
36
|
-
pnpm test
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## 运行约束
|
|
40
|
-
|
|
41
|
-
- 除 `--help` / `--version` 外,命令会要求 root,非 root 时自动尝试 sudo。
|
|
42
|
-
- 命令会强制以 `/root` 为 HOME。
|
|
43
|
-
- 安装 Node.js / npm / pip 依赖时内置国内镜像加速。
|
|
44
|
-
|
|
45
|
-
## 相关文档
|
|
46
|
-
|
|
47
|
-
- [根 README](../README.md)
|
|
48
|
-
- [部署架构](../docs/okclaw-deployment.md)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function migrationCommand(args: string[]): Promise<void>;
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
5
|
-
import { ARCHIVE_MANIFEST_NAME, buildCreateEncryptedArchiveCommand, buildDecryptArchiveCommand, buildTarCommand, buildTarCreateArgs, buildTarExtractArgs, buildTarExtractManifestArgs, buildTarListArgs, validateTarEntries, } from '../migration/archive.js';
|
|
6
|
-
import { buildMigrationManifest, existingManifestPaths, validateMigrationManifest, } from '../migration/manifest.js';
|
|
7
|
-
import { assertAgeIdentityContent, assertAgeRecipientContent, assertAuthenticatedEncryptionAvailable, } from '../migration/crypto.js';
|
|
8
|
-
import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
|
|
9
|
-
import { error, info, success } from '../utils/logger.js';
|
|
10
|
-
import { commandExists, shell, shellCapture } from '../utils/shell.js';
|
|
11
|
-
export async function migrationCommand(args) {
|
|
12
|
-
const emitter = new NdjsonEmitter('migration');
|
|
13
|
-
registerExitHandlers(emitter);
|
|
14
|
-
let parsed;
|
|
15
|
-
try {
|
|
16
|
-
parsed = parseMigrationArgs(args);
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
19
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
20
|
-
error(msg);
|
|
21
|
-
emitter.end(false, 1, 'E_USAGE', { error: msg });
|
|
22
|
-
process.exit(1);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
emitter.start(`migration ${parsed.action}`, migrationFields('start', `migration ${parsed.action}`, {
|
|
26
|
-
taskId: parsed.taskId,
|
|
27
|
-
shrimpId: parsed.shrimpId,
|
|
28
|
-
sourceHostId: parsed.sourceHostId,
|
|
29
|
-
targetHostId: parsed.targetHostId,
|
|
30
|
-
}));
|
|
31
|
-
try {
|
|
32
|
-
switch (parsed.action) {
|
|
33
|
-
case 'export':
|
|
34
|
-
await exportRuntime(parsed, emitter);
|
|
35
|
-
break;
|
|
36
|
-
case 'restore':
|
|
37
|
-
await restoreRuntime(parsed, emitter);
|
|
38
|
-
break;
|
|
39
|
-
case 'verify':
|
|
40
|
-
verifyManifest(parsed, emitter);
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
emitter.end(true, 0, undefined, { taskId: parsed.taskId, action: parsed.action });
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
47
|
-
error(msg);
|
|
48
|
-
emitter.end(false, 1, 'E_MIGRATION_FAILED', { error: msg, taskId: parsed.taskId, action: parsed.action });
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async function exportRuntime(args, emitter) {
|
|
53
|
-
if (!args.out || !args.keyFile)
|
|
54
|
-
throw new Error('export requires --out and --key-file');
|
|
55
|
-
await assertRequiredTools(['tar']);
|
|
56
|
-
await assertAuthenticatedEncryptionAvailable();
|
|
57
|
-
assertAgeRecipientContent(readFileSync(args.keyFile, 'utf8'), args.keyFile);
|
|
58
|
-
const workDir = mkdtempSync(join(tmpdir(), 'okclaw-migration-export-'));
|
|
59
|
-
const tarPath = join(workDir, 'runtime.tar');
|
|
60
|
-
const manifestPath = join(workDir, ARCHIVE_MANIFEST_NAME);
|
|
61
|
-
try {
|
|
62
|
-
emitter.stepStart('manifest', 'building migration manifest', migrationFields('manifest', 'building migration manifest'));
|
|
63
|
-
const manifest = buildMigrationManifest(identityFromArgs(args));
|
|
64
|
-
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
65
|
-
emitter.stepDone('manifest', 'migration manifest built', migrationFields('manifest', 'migration manifest built', {
|
|
66
|
-
missingPaths: manifest.missingPaths,
|
|
67
|
-
}));
|
|
68
|
-
emitter.stepStart('archive', 'creating runtime tar archive', migrationFields('archive', 'creating runtime tar archive'));
|
|
69
|
-
await shell(buildTarCommand(buildTarCreateArgs({
|
|
70
|
-
tarPath,
|
|
71
|
-
manifestPath,
|
|
72
|
-
existingIncludePaths: existingManifestPaths(manifest),
|
|
73
|
-
})));
|
|
74
|
-
emitter.stepDone('archive', 'runtime tar archive created', migrationFields('archive', 'runtime tar archive created'));
|
|
75
|
-
mkdirSync(dirname(args.out), { recursive: true });
|
|
76
|
-
emitter.stepStart('encrypt', 'encrypting runtime archive with age', migrationFields('encrypt', 'encrypting runtime archive'));
|
|
77
|
-
await shell(buildCreateEncryptedArchiveCommand(args.keyFile, tarPath, args.out));
|
|
78
|
-
emitter.stepDone('encrypt', 'encrypted runtime archive created', migrationFields('encrypt', 'encrypted runtime archive created', {
|
|
79
|
-
sha256: sha256File(args.out),
|
|
80
|
-
archive: args.out,
|
|
81
|
-
}));
|
|
82
|
-
success(`Migration archive exported: ${args.out}`);
|
|
83
|
-
}
|
|
84
|
-
finally {
|
|
85
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
async function restoreRuntime(args, emitter) {
|
|
89
|
-
if (!args.archive || !args.keyFile)
|
|
90
|
-
throw new Error('restore requires --archive and --key-file');
|
|
91
|
-
await assertRequiredTools(['tar']);
|
|
92
|
-
await assertAuthenticatedEncryptionAvailable();
|
|
93
|
-
if (!existsSync(args.archive))
|
|
94
|
-
throw new Error(`Archive not found: ${args.archive}`);
|
|
95
|
-
assertAgeIdentityContent(readFileSync(args.keyFile, 'utf8'), args.keyFile);
|
|
96
|
-
const workDir = mkdtempSync(join(tmpdir(), 'okclaw-migration-restore-'));
|
|
97
|
-
const tarPath = join(workDir, 'runtime.tar');
|
|
98
|
-
try {
|
|
99
|
-
emitter.stepStart('decrypt', 'decrypting runtime archive with age', migrationFields('decrypt', 'decrypting runtime archive'));
|
|
100
|
-
await shell(buildDecryptArchiveCommand(args.keyFile, args.archive, tarPath));
|
|
101
|
-
emitter.stepDone('decrypt', 'runtime archive decrypted', migrationFields('decrypt', 'runtime archive decrypted'));
|
|
102
|
-
emitter.stepStart('manifest', 'validating migration manifest', migrationFields('manifest', 'validating migration manifest'));
|
|
103
|
-
await shell(buildTarCommand(buildTarExtractManifestArgs(tarPath, workDir)));
|
|
104
|
-
const manifest = validateMigrationManifest(JSON.parse(readFileSync(join(workDir, ARCHIVE_MANIFEST_NAME), 'utf8')), identityFromArgs(args));
|
|
105
|
-
emitter.stepDone('manifest', 'migration manifest validated', migrationFields('manifest', 'migration manifest validated'));
|
|
106
|
-
emitter.stepStart('archive-safety', 'validating archive entry paths', migrationFields('archive-safety', 'validating archive entry paths'));
|
|
107
|
-
const listing = await shellCapture(buildTarCommand(buildTarListArgs(tarPath)));
|
|
108
|
-
if (listing.code !== 0)
|
|
109
|
-
throw new Error(`Unable to list migration archive: ${listing.stderr}`);
|
|
110
|
-
validateTarEntries(listing.stdout.split(/\r?\n/), existingManifestPaths(manifest));
|
|
111
|
-
emitter.stepDone('archive-safety', 'archive entries validated', migrationFields('archive-safety', 'archive entries validated'));
|
|
112
|
-
emitter.stepStart('restore', 'restoring runtime files', migrationFields('restore', 'restoring runtime files'));
|
|
113
|
-
await shell(buildTarCommand(buildTarExtractArgs(tarPath)));
|
|
114
|
-
emitter.stepDone('restore', 'runtime files restored', migrationFields('restore', 'runtime files restored'));
|
|
115
|
-
success(`Migration archive restored: ${args.archive}`);
|
|
116
|
-
}
|
|
117
|
-
finally {
|
|
118
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
function verifyManifest(args, emitter) {
|
|
122
|
-
if (!args.manifest)
|
|
123
|
-
throw new Error('verify requires --manifest');
|
|
124
|
-
emitter.stepStart('verify', 'validating migration manifest', migrationFields('verify', 'validating migration manifest'));
|
|
125
|
-
const manifest = validateMigrationManifest(JSON.parse(readFileSync(args.manifest, 'utf8')), identityFromArgs(args));
|
|
126
|
-
emitter.stepDone('verify', 'migration manifest valid', migrationFields('verify', 'migration manifest valid', {
|
|
127
|
-
missingPaths: manifest.missingPaths,
|
|
128
|
-
}));
|
|
129
|
-
info('Migration manifest is valid.');
|
|
130
|
-
}
|
|
131
|
-
function parseMigrationArgs(args) {
|
|
132
|
-
const action = args[0];
|
|
133
|
-
if (action !== 'export' && action !== 'restore' && action !== 'verify') {
|
|
134
|
-
throw new Error('Usage: okclaw migration <export|restore|verify> --task-id <id> --shrimp-id <id> --source-host-id <id> --target-host-id <id>');
|
|
135
|
-
}
|
|
136
|
-
const flags = parseFlags(args.slice(1));
|
|
137
|
-
const parsed = {
|
|
138
|
-
action,
|
|
139
|
-
taskId: requireFlag(flags, 'task-id'),
|
|
140
|
-
shrimpId: requireFlag(flags, 'shrimp-id'),
|
|
141
|
-
sourceHostId: requireFlag(flags, 'source-host-id'),
|
|
142
|
-
targetHostId: requireFlag(flags, 'target-host-id'),
|
|
143
|
-
out: flags.get('out'),
|
|
144
|
-
archive: flags.get('archive'),
|
|
145
|
-
keyFile: flags.get('key-file'),
|
|
146
|
-
manifest: flags.get('manifest'),
|
|
147
|
-
};
|
|
148
|
-
if (action === 'export' && (!parsed.out || !parsed.keyFile)) {
|
|
149
|
-
throw new Error('Usage: okclaw migration export --task-id <id> --shrimp-id <id> --source-host-id <id> --target-host-id <id> --out <archive> --key-file <key>');
|
|
150
|
-
}
|
|
151
|
-
if (action === 'restore' && (!parsed.archive || !parsed.keyFile)) {
|
|
152
|
-
throw new Error('Usage: okclaw migration restore --task-id <id> --shrimp-id <id> --source-host-id <id> --target-host-id <id> --archive <archive> --key-file <key>');
|
|
153
|
-
}
|
|
154
|
-
if (action === 'verify' && !parsed.manifest) {
|
|
155
|
-
throw new Error('Usage: okclaw migration verify --task-id <id> --shrimp-id <id> --source-host-id <id> --target-host-id <id> --manifest <manifest>');
|
|
156
|
-
}
|
|
157
|
-
return parsed;
|
|
158
|
-
}
|
|
159
|
-
function parseFlags(args) {
|
|
160
|
-
const flags = new Map();
|
|
161
|
-
for (let i = 0; i < args.length; i++) {
|
|
162
|
-
const arg = args[i];
|
|
163
|
-
if (!arg.startsWith('--'))
|
|
164
|
-
throw new Error(`Unexpected argument: ${arg}`);
|
|
165
|
-
const withoutPrefix = arg.slice(2);
|
|
166
|
-
const eq = withoutPrefix.indexOf('=');
|
|
167
|
-
if (eq >= 0) {
|
|
168
|
-
flags.set(withoutPrefix.slice(0, eq), withoutPrefix.slice(eq + 1));
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
const value = args[++i];
|
|
172
|
-
if (!value || value.startsWith('--'))
|
|
173
|
-
throw new Error(`Missing value for --${withoutPrefix}`);
|
|
174
|
-
flags.set(withoutPrefix, value);
|
|
175
|
-
}
|
|
176
|
-
return flags;
|
|
177
|
-
}
|
|
178
|
-
function requireFlag(flags, name) {
|
|
179
|
-
const value = flags.get(name);
|
|
180
|
-
if (!value)
|
|
181
|
-
throw new Error(`--${name} is required`);
|
|
182
|
-
return value;
|
|
183
|
-
}
|
|
184
|
-
function identityFromArgs(args) {
|
|
185
|
-
return {
|
|
186
|
-
taskId: args.taskId,
|
|
187
|
-
shrimpId: args.shrimpId,
|
|
188
|
-
sourceHostId: args.sourceHostId,
|
|
189
|
-
targetHostId: args.targetHostId,
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
async function assertRequiredTools(commands) {
|
|
193
|
-
for (const command of commands) {
|
|
194
|
-
if (!await commandExists(command)) {
|
|
195
|
-
throw new Error(`Missing required command: ${command}`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
function migrationFields(phase, message, data = {}) {
|
|
200
|
-
return { phase, message, data };
|
|
201
|
-
}
|
|
202
|
-
function sha256File(path) {
|
|
203
|
-
return createHash('sha256').update(readFileSync(path)).digest('hex');
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=migration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/commands/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare const ARCHIVE_MANIFEST_NAME = "migration-manifest.json";
|
|
2
|
-
export interface TarCreateOptions {
|
|
3
|
-
tarPath: string;
|
|
4
|
-
manifestPath: string;
|
|
5
|
-
existingIncludePaths: string[];
|
|
6
|
-
}
|
|
7
|
-
export declare function buildTarCreateArgs(options: TarCreateOptions): string[];
|
|
8
|
-
export declare function buildTarExtractArgs(tarPath: string): string[];
|
|
9
|
-
export declare function buildTarListArgs(tarPath: string): string[];
|
|
10
|
-
export declare function validateTarEntries(entries: string[], allowedAbsoluteRoots: string[]): void;
|
|
11
|
-
export declare function buildTarExtractManifestArgs(tarPath: string, outDir: string): string[];
|
|
12
|
-
export declare function buildTarCommand(args: string[]): string;
|
|
13
|
-
export declare function buildCreateEncryptedArchiveCommand(keyFile: string, inputTarPath: string, outputArchivePath: string): string;
|
|
14
|
-
export declare function buildDecryptArchiveCommand(keyFile: string, inputArchivePath: string, outputTarPath: string): string;
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { basename, dirname } from 'node:path';
|
|
2
|
-
import { excludePatterns } from './manifest.js';
|
|
3
|
-
import { buildAgeCommand, buildAgeDecryptArgs, buildAgeEncryptArgs, quoteShellArg } from './crypto.js';
|
|
4
|
-
export const ARCHIVE_MANIFEST_NAME = 'migration-manifest.json';
|
|
5
|
-
export function buildTarCreateArgs(options) {
|
|
6
|
-
return [
|
|
7
|
-
'--create',
|
|
8
|
-
'--file',
|
|
9
|
-
options.tarPath,
|
|
10
|
-
'--xattrs',
|
|
11
|
-
'--acls',
|
|
12
|
-
'--numeric-owner',
|
|
13
|
-
...excludePatterns.map((pattern) => `--exclude=${pattern}`),
|
|
14
|
-
'-C',
|
|
15
|
-
dirname(options.manifestPath),
|
|
16
|
-
basename(options.manifestPath),
|
|
17
|
-
'-C',
|
|
18
|
-
'/',
|
|
19
|
-
...options.existingIncludePaths.map(toTarRelativePath),
|
|
20
|
-
];
|
|
21
|
-
}
|
|
22
|
-
export function buildTarExtractArgs(tarPath) {
|
|
23
|
-
return [
|
|
24
|
-
'--extract',
|
|
25
|
-
'--file',
|
|
26
|
-
tarPath,
|
|
27
|
-
'--same-owner',
|
|
28
|
-
'--preserve-permissions',
|
|
29
|
-
'--numeric-owner',
|
|
30
|
-
'-C',
|
|
31
|
-
'/',
|
|
32
|
-
];
|
|
33
|
-
}
|
|
34
|
-
export function buildTarListArgs(tarPath) {
|
|
35
|
-
return [
|
|
36
|
-
'--list',
|
|
37
|
-
'--file',
|
|
38
|
-
tarPath,
|
|
39
|
-
];
|
|
40
|
-
}
|
|
41
|
-
export function validateTarEntries(entries, allowedAbsoluteRoots) {
|
|
42
|
-
const allowed = new Set([
|
|
43
|
-
ARCHIVE_MANIFEST_NAME,
|
|
44
|
-
...allowedAbsoluteRoots.map(toTarRelativePath).map(stripTrailingSlash),
|
|
45
|
-
]);
|
|
46
|
-
for (const raw of entries) {
|
|
47
|
-
const entry = stripTrailingSlash(raw.trim());
|
|
48
|
-
if (!entry)
|
|
49
|
-
continue;
|
|
50
|
-
if (entry.startsWith('/') || entry.split('/').includes('..')) {
|
|
51
|
-
throw new Error(`Unsafe archive entry: ${raw}`);
|
|
52
|
-
}
|
|
53
|
-
const ok = [...allowed].some((root) => entry === root || entry.startsWith(`${root}/`));
|
|
54
|
-
if (!ok) {
|
|
55
|
-
throw new Error(`Archive entry outside manifest paths: ${raw}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export function buildTarExtractManifestArgs(tarPath, outDir) {
|
|
60
|
-
return [
|
|
61
|
-
'--extract',
|
|
62
|
-
'--file',
|
|
63
|
-
tarPath,
|
|
64
|
-
'-C',
|
|
65
|
-
outDir,
|
|
66
|
-
ARCHIVE_MANIFEST_NAME,
|
|
67
|
-
];
|
|
68
|
-
}
|
|
69
|
-
export function buildTarCommand(args) {
|
|
70
|
-
return ['tar', ...args.map(quoteShellArg)].join(' ');
|
|
71
|
-
}
|
|
72
|
-
export function buildCreateEncryptedArchiveCommand(keyFile, inputTarPath, outputArchivePath) {
|
|
73
|
-
return buildAgeCommand(buildAgeEncryptArgs(keyFile, inputTarPath, outputArchivePath));
|
|
74
|
-
}
|
|
75
|
-
export function buildDecryptArchiveCommand(keyFile, inputArchivePath, outputTarPath) {
|
|
76
|
-
return buildAgeCommand(buildAgeDecryptArgs(keyFile, inputArchivePath, outputTarPath));
|
|
77
|
-
}
|
|
78
|
-
function toTarRelativePath(path) {
|
|
79
|
-
return path.replace(/^\/+/, '');
|
|
80
|
-
}
|
|
81
|
-
function stripTrailingSlash(path) {
|
|
82
|
-
return path.replace(/\/+$/, '');
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=archive.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/migration/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare const AUTHENTICATED_ENCRYPTION_TOOL = "age";
|
|
2
|
-
export declare const AUTHENTICATED_ENCRYPTION_CONTRACT = "age-v1-X25519-ChaCha20Poly1305";
|
|
3
|
-
export declare function buildAgeEncryptArgs(keyFile: string, inputPath: string, outputPath: string): string[];
|
|
4
|
-
export declare function buildAgeDecryptArgs(keyFile: string, inputPath: string, outputPath: string): string[];
|
|
5
|
-
export declare function buildAgeCommand(args: string[]): string;
|
|
6
|
-
export declare function assertAuthenticatedEncryptionAvailable(): Promise<void>;
|
|
7
|
-
export declare function quoteShellArg(value: string): string;
|
|
8
|
-
/**
|
|
9
|
-
* export 用 `--recipient-file`,必须是 age 公钥;若误传私钥(identity),age 会在运行期才报错。
|
|
10
|
-
* 提前在 CLI 层显式校验,避免操作人把私钥当公钥用。
|
|
11
|
-
*/
|
|
12
|
-
export declare function assertAgeRecipientContent(content: string, keyFile: string): void;
|
|
13
|
-
/**
|
|
14
|
-
* restore 用 `--identity`,必须是 age 私钥;若误传只含公钥的文件,提前报错而不是等 age 运行期失败。
|
|
15
|
-
*/
|
|
16
|
-
export declare function assertAgeIdentityContent(content: string, keyFile: string): void;
|
package/dist/migration/crypto.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { commandExists } from '../utils/shell.js';
|
|
2
|
-
export const AUTHENTICATED_ENCRYPTION_TOOL = 'age';
|
|
3
|
-
export const AUTHENTICATED_ENCRYPTION_CONTRACT = 'age-v1-X25519-ChaCha20Poly1305';
|
|
4
|
-
export function buildAgeEncryptArgs(keyFile, inputPath, outputPath) {
|
|
5
|
-
return [
|
|
6
|
-
'--encrypt',
|
|
7
|
-
'--recipient-file',
|
|
8
|
-
keyFile,
|
|
9
|
-
'--output',
|
|
10
|
-
outputPath,
|
|
11
|
-
inputPath,
|
|
12
|
-
];
|
|
13
|
-
}
|
|
14
|
-
export function buildAgeDecryptArgs(keyFile, inputPath, outputPath) {
|
|
15
|
-
return [
|
|
16
|
-
'--decrypt',
|
|
17
|
-
'--identity',
|
|
18
|
-
keyFile,
|
|
19
|
-
'--output',
|
|
20
|
-
outputPath,
|
|
21
|
-
inputPath,
|
|
22
|
-
];
|
|
23
|
-
}
|
|
24
|
-
export function buildAgeCommand(args) {
|
|
25
|
-
return [AUTHENTICATED_ENCRYPTION_TOOL, ...args.map(quoteShellArg)].join(' ');
|
|
26
|
-
}
|
|
27
|
-
export async function assertAuthenticatedEncryptionAvailable() {
|
|
28
|
-
if (!await commandExists(AUTHENTICATED_ENCRYPTION_TOOL)) {
|
|
29
|
-
throw new Error('Missing authenticated encryption tool: age');
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export function quoteShellArg(value) {
|
|
33
|
-
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
34
|
-
}
|
|
35
|
-
const AGE_SECRET_KEY_MARKER = /AGE-SECRET-KEY-/;
|
|
36
|
-
const OPENSSH_PRIVATE_KEY_MARKER = /BEGIN OPENSSH PRIVATE KEY/;
|
|
37
|
-
const AGE_RECIPIENT_MARKER = /(^|\n)\s*age1[0-9a-z]/;
|
|
38
|
-
/**
|
|
39
|
-
* export 用 `--recipient-file`,必须是 age 公钥;若误传私钥(identity),age 会在运行期才报错。
|
|
40
|
-
* 提前在 CLI 层显式校验,避免操作人把私钥当公钥用。
|
|
41
|
-
*/
|
|
42
|
-
export function assertAgeRecipientContent(content, keyFile) {
|
|
43
|
-
if (AGE_SECRET_KEY_MARKER.test(content)) {
|
|
44
|
-
throw new Error(`--key-file 应为 age 公钥(recipient)文件,但 ${keyFile} 含 age 私钥;export 加密只需公钥`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* restore 用 `--identity`,必须是 age 私钥;若误传只含公钥的文件,提前报错而不是等 age 运行期失败。
|
|
49
|
-
*/
|
|
50
|
-
export function assertAgeIdentityContent(content, keyFile) {
|
|
51
|
-
const hasIdentity = AGE_SECRET_KEY_MARKER.test(content) || OPENSSH_PRIVATE_KEY_MARKER.test(content);
|
|
52
|
-
if (!hasIdentity && AGE_RECIPIENT_MARKER.test(content)) {
|
|
53
|
-
throw new Error(`--key-file 应为 age 私钥(identity)文件,但 ${keyFile} 仅含 age 公钥;restore 解密需要私钥`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/migration/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AACnD,MAAM,CAAC,MAAM,iCAAiC,GAAG,gCAAgC,CAAC;AAElF,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,SAAiB,EAAE,UAAkB;IACxF,OAAO;QACL,WAAW;QACX,kBAAkB;QAClB,OAAO;QACP,UAAU;QACV,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,SAAiB,EAAE,UAAkB;IACxF,OAAO;QACL,WAAW;QACX,YAAY;QACZ,OAAO;QACP,UAAU;QACV,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,CAAC,6BAA6B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sCAAsC;IAC1D,IAAI,CAAC,MAAM,aAAa,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAChD,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AAC/D,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,OAAe;IACxE,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,yBAAyB,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,OAAe;IACvE,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,2BAA2B,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export declare const MIGRATION_MANIFEST_VERSION = "openclaw-runtime-v1";
|
|
2
|
-
export declare const LEGACY_OPENCLAW_WORKSPACE = "/root/openclaw/workspace";
|
|
3
|
-
export declare const includePaths: string[];
|
|
4
|
-
export declare const excludePatterns: string[];
|
|
5
|
-
export declare const requiredRuntimeFiles: string[];
|
|
6
|
-
export interface MigrationManifestPath {
|
|
7
|
-
path: string;
|
|
8
|
-
status: 'included' | 'missing';
|
|
9
|
-
type?: 'file' | 'directory' | 'symlink' | 'other';
|
|
10
|
-
mode?: number;
|
|
11
|
-
uid?: number;
|
|
12
|
-
gid?: number;
|
|
13
|
-
}
|
|
14
|
-
export interface MigrationManifest {
|
|
15
|
-
version: typeof MIGRATION_MANIFEST_VERSION;
|
|
16
|
-
createdAt: string;
|
|
17
|
-
taskId: string;
|
|
18
|
-
shrimpId: string;
|
|
19
|
-
sourceHostId: string;
|
|
20
|
-
targetHostId: string;
|
|
21
|
-
includePaths: string[];
|
|
22
|
-
excludePatterns: string[];
|
|
23
|
-
requiredRuntimeFiles: string[];
|
|
24
|
-
missingPaths: string[];
|
|
25
|
-
paths: MigrationManifestPath[];
|
|
26
|
-
}
|
|
27
|
-
export interface MigrationIdentity {
|
|
28
|
-
taskId: string;
|
|
29
|
-
shrimpId: string;
|
|
30
|
-
sourceHostId: string;
|
|
31
|
-
targetHostId: string;
|
|
32
|
-
}
|
|
33
|
-
export interface BuildManifestOptions extends MigrationIdentity {
|
|
34
|
-
rootDir?: string;
|
|
35
|
-
createdAt?: string;
|
|
36
|
-
}
|
|
37
|
-
export declare function buildMigrationManifest(options: BuildManifestOptions): MigrationManifest;
|
|
38
|
-
export declare function existingManifestPaths(manifest: MigrationManifest): string[];
|
|
39
|
-
export declare function validateMigrationManifest(value: unknown, expected: MigrationIdentity): MigrationManifest;
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { existsSync, lstatSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { OKCLAW_BACKUP_DIR, OKCLAW_CONFIG_DIR, OPENCLAW_HOME, OPENCLAW_WORKSPACE, OPENVIKING_HOME, } from '../utils/constants.js';
|
|
4
|
-
export const MIGRATION_MANIFEST_VERSION = 'openclaw-runtime-v1';
|
|
5
|
-
export const LEGACY_OPENCLAW_WORKSPACE = '/root/openclaw/workspace';
|
|
6
|
-
export const includePaths = [
|
|
7
|
-
OPENCLAW_HOME,
|
|
8
|
-
OPENCLAW_WORKSPACE,
|
|
9
|
-
LEGACY_OPENCLAW_WORKSPACE,
|
|
10
|
-
OKCLAW_CONFIG_DIR,
|
|
11
|
-
OKCLAW_BACKUP_DIR,
|
|
12
|
-
OPENVIKING_HOME,
|
|
13
|
-
];
|
|
14
|
-
export const excludePatterns = [
|
|
15
|
-
'**/*.sock',
|
|
16
|
-
'**/*.pid',
|
|
17
|
-
'**/*.lock',
|
|
18
|
-
'**/tmp/**',
|
|
19
|
-
'**/.cache/**',
|
|
20
|
-
'**/node_modules/.cache/**',
|
|
21
|
-
];
|
|
22
|
-
export const requiredRuntimeFiles = [
|
|
23
|
-
`${OPENCLAW_HOME}/openclaw.json`,
|
|
24
|
-
];
|
|
25
|
-
export function buildMigrationManifest(options) {
|
|
26
|
-
const rootDir = options.rootDir ?? '/';
|
|
27
|
-
const missingCritical = requiredRuntimeFiles.filter((path) => !existsSync(toHostPath(rootDir, path)));
|
|
28
|
-
if (missingCritical.length > 0) {
|
|
29
|
-
throw new Error(`Missing critical runtime file: ${missingCritical.join(', ')}`);
|
|
30
|
-
}
|
|
31
|
-
const paths = includePaths.map((path) => {
|
|
32
|
-
const hostPath = toHostPath(rootDir, path);
|
|
33
|
-
if (!existsSync(hostPath)) {
|
|
34
|
-
return { path, status: 'missing' };
|
|
35
|
-
}
|
|
36
|
-
const stat = lstatSync(hostPath);
|
|
37
|
-
return {
|
|
38
|
-
path,
|
|
39
|
-
status: 'included',
|
|
40
|
-
type: stat.isDirectory() ? 'directory' : stat.isFile() ? 'file' : stat.isSymbolicLink() ? 'symlink' : 'other',
|
|
41
|
-
mode: stat.mode,
|
|
42
|
-
uid: stat.uid,
|
|
43
|
-
gid: stat.gid,
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
return {
|
|
47
|
-
version: MIGRATION_MANIFEST_VERSION,
|
|
48
|
-
createdAt: options.createdAt ?? new Date().toISOString(),
|
|
49
|
-
taskId: options.taskId,
|
|
50
|
-
shrimpId: options.shrimpId,
|
|
51
|
-
sourceHostId: options.sourceHostId,
|
|
52
|
-
targetHostId: options.targetHostId,
|
|
53
|
-
includePaths: [...includePaths],
|
|
54
|
-
excludePatterns: [...excludePatterns],
|
|
55
|
-
requiredRuntimeFiles: [...requiredRuntimeFiles],
|
|
56
|
-
missingPaths: paths.filter((item) => item.status === 'missing').map((item) => item.path),
|
|
57
|
-
paths,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
export function existingManifestPaths(manifest) {
|
|
61
|
-
return manifest.paths.filter((item) => item.status === 'included').map((item) => item.path);
|
|
62
|
-
}
|
|
63
|
-
export function validateMigrationManifest(value, expected) {
|
|
64
|
-
if (!isManifest(value)) {
|
|
65
|
-
throw new Error('Invalid migration manifest');
|
|
66
|
-
}
|
|
67
|
-
if (value.version !== MIGRATION_MANIFEST_VERSION) {
|
|
68
|
-
throw new Error(`Unsupported manifest version: ${value.version}`);
|
|
69
|
-
}
|
|
70
|
-
assertEqual('taskId', value.taskId, expected.taskId);
|
|
71
|
-
assertEqual('shrimpId', value.shrimpId, expected.shrimpId);
|
|
72
|
-
assertEqual('sourceHostId', value.sourceHostId, expected.sourceHostId);
|
|
73
|
-
assertEqual('targetHostId', value.targetHostId, expected.targetHostId);
|
|
74
|
-
/*
|
|
75
|
-
* Restore cannot trust the archive's manifest to define its own allowed roots.
|
|
76
|
-
* The tar safety check extracts to /, so a malicious package that declares /etc
|
|
77
|
-
* as an included path would otherwise turn the manifest into an allow-list bypass.
|
|
78
|
-
* Keep the manifest useful for audit, but require every path list to match the
|
|
79
|
-
* hard-coded runtime contract compiled into this CLI version.
|
|
80
|
-
*/
|
|
81
|
-
assertStringArrayEqual('includePaths', value.includePaths, includePaths);
|
|
82
|
-
assertStringArrayEqual('excludePatterns', value.excludePatterns, excludePatterns);
|
|
83
|
-
assertStringArrayEqual('requiredRuntimeFiles', value.requiredRuntimeFiles, requiredRuntimeFiles);
|
|
84
|
-
validateManifestPathSet(value);
|
|
85
|
-
return value;
|
|
86
|
-
}
|
|
87
|
-
function assertEqual(field, actual, expected) {
|
|
88
|
-
if (actual !== expected) {
|
|
89
|
-
throw new Error(`Manifest ${field} mismatch: expected ${expected}, got ${actual}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function isManifest(value) {
|
|
93
|
-
if (typeof value !== 'object' || value === null)
|
|
94
|
-
return false;
|
|
95
|
-
const candidate = value;
|
|
96
|
-
return typeof candidate.version === 'string'
|
|
97
|
-
&& typeof candidate.taskId === 'string'
|
|
98
|
-
&& typeof candidate.shrimpId === 'string'
|
|
99
|
-
&& typeof candidate.sourceHostId === 'string'
|
|
100
|
-
&& typeof candidate.targetHostId === 'string'
|
|
101
|
-
&& Array.isArray(candidate.includePaths)
|
|
102
|
-
&& Array.isArray(candidate.excludePatterns)
|
|
103
|
-
&& Array.isArray(candidate.requiredRuntimeFiles)
|
|
104
|
-
&& Array.isArray(candidate.missingPaths)
|
|
105
|
-
&& Array.isArray(candidate.paths);
|
|
106
|
-
}
|
|
107
|
-
function assertStringArrayEqual(field, actual, expected) {
|
|
108
|
-
if (!Array.isArray(actual) || actual.length !== expected.length
|
|
109
|
-
|| actual.some((item, index) => item !== expected[index])) {
|
|
110
|
-
throw new Error(`Manifest ${field} does not match CLI runtime contract`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function validateManifestPathSet(manifest) {
|
|
114
|
-
const allowed = new Set(includePaths);
|
|
115
|
-
const seen = new Set();
|
|
116
|
-
const missing = new Set();
|
|
117
|
-
for (const item of manifest.paths) {
|
|
118
|
-
if (!item || typeof item.path !== 'string' || !allowed.has(item.path)) {
|
|
119
|
-
throw new Error(`Manifest path outside CLI runtime contract: ${item?.path ?? '<invalid>'}`);
|
|
120
|
-
}
|
|
121
|
-
if (seen.has(item.path)) {
|
|
122
|
-
throw new Error(`Manifest path duplicated: ${item.path}`);
|
|
123
|
-
}
|
|
124
|
-
seen.add(item.path);
|
|
125
|
-
if (item.status !== 'included' && item.status !== 'missing') {
|
|
126
|
-
throw new Error(`Manifest path has invalid status: ${item.path}`);
|
|
127
|
-
}
|
|
128
|
-
if (item.status === 'missing') {
|
|
129
|
-
missing.add(item.path);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (manifest.missingPaths.length !== missing.size
|
|
133
|
-
|| manifest.missingPaths.some((path) => !missing.has(path))) {
|
|
134
|
-
throw new Error('Manifest missingPaths does not match path statuses');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
function toHostPath(rootDir, absolutePath) {
|
|
138
|
-
return join(rootDir, absolutePath.replace(/^\/+/, ''));
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/migration/manifest.ts"],"names":[],"mappings":"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"}
|