@okclaw-build/cli 1.0.0-beta.6 → 1.0.0-beta.61
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/bridge/daemon/channel-auth-runtime.d.ts +16 -0
- package/dist/bridge/daemon/channel-auth-runtime.js +2 -0
- package/dist/bridge/daemon/channel-auth-runtime.js.map +1 -0
- package/dist/bridge/daemon/config.d.ts +24 -0
- package/dist/bridge/daemon/config.js +96 -0
- package/dist/bridge/daemon/config.js.map +1 -0
- package/dist/bridge/daemon/daemon.d.ts +7 -0
- package/dist/bridge/daemon/daemon.js +32 -0
- package/dist/bridge/daemon/daemon.js.map +1 -0
- package/dist/bridge/daemon/event-id.d.ts +2 -0
- package/dist/bridge/daemon/event-id.js +18 -0
- package/dist/bridge/daemon/event-id.js.map +1 -0
- package/dist/bridge/daemon/frames.d.ts +81 -0
- package/dist/bridge/daemon/frames.js +64 -0
- package/dist/bridge/daemon/frames.js.map +1 -0
- package/dist/bridge/daemon/openclaw-chat-runtime.d.ts +80 -0
- package/dist/bridge/daemon/openclaw-chat-runtime.js +1222 -0
- package/dist/bridge/daemon/openclaw-chat-runtime.js.map +1 -0
- package/dist/bridge/daemon/openclaw-gateway-client.d.ts +58 -0
- package/dist/bridge/daemon/openclaw-gateway-client.js +251 -0
- package/dist/bridge/daemon/openclaw-gateway-client.js.map +1 -0
- package/dist/bridge/daemon/openclaw-weixin-auth-runtime.d.ts +28 -0
- package/dist/bridge/daemon/openclaw-weixin-auth-runtime.js +266 -0
- package/dist/bridge/daemon/openclaw-weixin-auth-runtime.js.map +1 -0
- package/dist/bridge/daemon/openclaw-weixin-plugin.d.ts +67 -0
- package/dist/bridge/daemon/openclaw-weixin-plugin.js +196 -0
- package/dist/bridge/daemon/openclaw-weixin-plugin.js.map +1 -0
- package/dist/bridge/daemon/relay-client.d.ts +79 -0
- package/dist/bridge/daemon/relay-client.js +396 -0
- package/dist/bridge/daemon/relay-client.js.map +1 -0
- package/dist/bridge/daemon/stub-chat-runtime.d.ts +4 -0
- package/dist/bridge/daemon/stub-chat-runtime.js +91 -0
- package/dist/bridge/daemon/stub-chat-runtime.js.map +1 -0
- package/dist/bridge/service.d.ts +12 -0
- package/dist/bridge/service.js +86 -0
- package/dist/bridge/service.js.map +1 -0
- package/dist/commands/backup.d.ts +16 -0
- package/dist/commands/backup.js +99 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/bridge.d.ts +7 -0
- package/dist/commands/bridge.js +100 -0
- package/dist/commands/bridge.js.map +1 -0
- package/dist/commands/check.js +22 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/edit.d.ts +2 -7
- package/dist/commands/edit.js +28 -16
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/feed.js +48 -16
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/install.js +99 -18
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/migration.d.ts +1 -0
- package/dist/commands/migration.js +205 -0
- package/dist/commands/migration.js.map +1 -0
- package/dist/commands/openclaw-channel-login.d.ts +54 -0
- package/dist/commands/openclaw-channel-login.js +334 -0
- package/dist/commands/openclaw-channel-login.js.map +1 -0
- package/dist/commands/restore.d.ts +16 -0
- package/dist/commands/restore.js +94 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/service.js +56 -13
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/show.d.ts +13 -0
- package/dist/commands/show.js +70 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/skill.d.ts +1 -0
- package/dist/commands/skill.js +137 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +46 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.js +116 -12
- package/dist/index.js.map +1 -1
- package/dist/installers/base.d.ts +3 -1
- package/dist/installers/channel.d.ts +10 -2
- package/dist/installers/channel.js +143 -24
- package/dist/installers/channel.js.map +1 -1
- package/dist/installers/openclaw.d.ts +20 -2
- package/dist/installers/openclaw.js +201 -55
- package/dist/installers/openclaw.js.map +1 -1
- package/dist/installers/openviking-purge.d.ts +52 -0
- package/dist/installers/openviking-purge.js +380 -0
- package/dist/installers/openviking-purge.js.map +1 -0
- package/dist/installers/openviking.js +1 -2
- package/dist/installers/openviking.js.map +1 -1
- package/dist/installers/skill.d.ts +5 -2
- package/dist/installers/skill.js +67 -18
- package/dist/installers/skill.js.map +1 -1
- package/dist/migration/archive.d.ts +14 -0
- package/dist/migration/archive.js +84 -0
- package/dist/migration/archive.js.map +1 -0
- package/dist/migration/crypto.d.ts +16 -0
- package/dist/migration/crypto.js +56 -0
- package/dist/migration/crypto.js.map +1 -0
- package/dist/migration/manifest.d.ts +39 -0
- package/dist/migration/manifest.js +140 -0
- package/dist/migration/manifest.js.map +1 -0
- package/dist/openclaw-user-data.d.ts +86 -0
- package/dist/openclaw-user-data.js +422 -0
- package/dist/openclaw-user-data.js.map +1 -0
- package/dist/output/mode.d.ts +11 -0
- package/dist/output/mode.js +27 -0
- package/dist/output/mode.js.map +1 -0
- package/dist/output/ndjson.d.ts +57 -0
- package/dist/output/ndjson.js +136 -0
- package/dist/output/ndjson.js.map +1 -0
- package/dist/utils/constants.d.ts +14 -13
- package/dist/utils/constants.js +40 -21
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/deps.d.ts +34 -3
- package/dist/utils/deps.js +62 -100
- package/dist/utils/deps.js.map +1 -1
- package/dist/utils/install-safety.d.ts +25 -0
- package/dist/utils/install-safety.js +97 -0
- package/dist/utils/install-safety.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +31 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mirror.js +14 -0
- package/dist/utils/mirror.js.map +1 -1
- package/dist/utils/openclaw-config-cli.d.ts +19 -0
- package/dist/utils/openclaw-config-cli.js +81 -0
- package/dist/utils/openclaw-config-cli.js.map +1 -0
- package/dist/utils/openclaw-daemon.d.ts +58 -0
- package/dist/utils/openclaw-daemon.js +154 -0
- package/dist/utils/openclaw-daemon.js.map +1 -0
- package/dist/utils/shell.d.ts +23 -2
- package/dist/utils/shell.js +138 -5
- package/dist/utils/shell.js.map +1 -1
- package/package.json +6 -4
package/dist/commands/install.js
CHANGED
|
@@ -1,27 +1,48 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { OpenclawInstaller } from '../installers/openclaw.js';
|
|
3
|
-
import { OpenvikingInstaller } from '../installers/openviking.js';
|
|
4
3
|
import { ChannelInstaller } from '../installers/channel.js';
|
|
5
4
|
import { SkillInstaller } from '../installers/skill.js';
|
|
5
|
+
import { detectOpenviking, purgePhaseA } from '../installers/openviking-purge.js';
|
|
6
|
+
import { installBridgeService } from '../bridge/service.js';
|
|
7
|
+
import { parseBridgeInstallArgs } from './bridge.js';
|
|
6
8
|
import { configureMirrors } from '../utils/mirror.js';
|
|
7
9
|
import { info, error, success } from '../utils/logger.js';
|
|
10
|
+
import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
|
|
11
|
+
import { assertSafePackageVersion, parseInstallComponent, parsePackageSource, } from '../utils/install-safety.js';
|
|
8
12
|
function getInstaller(component) {
|
|
9
|
-
switch (component) {
|
|
13
|
+
switch (component.kind) {
|
|
10
14
|
case 'openclaw': return new OpenclawInstaller();
|
|
11
|
-
case '
|
|
12
|
-
|
|
13
|
-
if (component.startsWith('skill:')) {
|
|
14
|
-
return new SkillInstaller(component.substring('skill:'.length));
|
|
15
|
-
}
|
|
16
|
-
return new ChannelInstaller(component);
|
|
15
|
+
case 'skill': return new SkillInstaller(component.skillName);
|
|
16
|
+
case 'channel': return new ChannelInstaller(component.channelName);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
export async function installCommand(args) {
|
|
20
|
+
const emitter = new NdjsonEmitter('install');
|
|
21
|
+
registerExitHandlers(emitter);
|
|
20
22
|
const component = args[0];
|
|
21
23
|
if (!component) {
|
|
22
24
|
error('Usage: okclaw install <component> --version <ver> [--config <json>] [--config-file <path>] [--package-url <url>]');
|
|
25
|
+
emitter.end(false, 1, 'E_USAGE');
|
|
23
26
|
process.exit(1);
|
|
24
27
|
}
|
|
28
|
+
if (component === 'bridge') {
|
|
29
|
+
try {
|
|
30
|
+
const bridgeArgs = parseBridgeInstallArgs(['install', ...args.slice(1)]);
|
|
31
|
+
emitter.start('installing bridge service', { component: 'bridge' });
|
|
32
|
+
emitter.stepStart('install', 'installing bridge service');
|
|
33
|
+
await installBridgeService(bridgeArgs);
|
|
34
|
+
emitter.stepDone('install', 'bridge service installed');
|
|
35
|
+
success('Bridge service installed.');
|
|
36
|
+
emitter.end(true, 0, undefined, { component: 'bridge' });
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
40
|
+
error(msg);
|
|
41
|
+
emitter.end(false, 1, msg === 'E_BRIDGE_USAGE' ? 'E_USAGE' : 'E_INSTALL_FAILED', { error: msg });
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
25
46
|
let version = '';
|
|
26
47
|
let config;
|
|
27
48
|
let packageUrl;
|
|
@@ -37,6 +58,7 @@ export async function installCommand(args) {
|
|
|
37
58
|
}
|
|
38
59
|
catch {
|
|
39
60
|
error('Invalid --config JSON');
|
|
61
|
+
emitter.end(false, 1, 'E_CONFIG_JSON');
|
|
40
62
|
process.exit(1);
|
|
41
63
|
}
|
|
42
64
|
continue;
|
|
@@ -48,6 +70,7 @@ export async function installCommand(args) {
|
|
|
48
70
|
}
|
|
49
71
|
catch (e) {
|
|
50
72
|
error(`Failed to read config file: ${e}`);
|
|
73
|
+
emitter.end(false, 1, 'E_CONFIG_FILE');
|
|
51
74
|
process.exit(1);
|
|
52
75
|
}
|
|
53
76
|
continue;
|
|
@@ -59,19 +82,77 @@ export async function installCommand(args) {
|
|
|
59
82
|
}
|
|
60
83
|
if (!version) {
|
|
61
84
|
error('--version is required');
|
|
85
|
+
emitter.end(false, 1, 'E_VERSION_REQUIRED');
|
|
62
86
|
process.exit(1);
|
|
63
87
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
88
|
+
let parsed;
|
|
89
|
+
let safeVersion;
|
|
90
|
+
let packageSource;
|
|
91
|
+
try {
|
|
92
|
+
parsed = parseInstallComponent(component);
|
|
93
|
+
safeVersion = assertSafePackageVersion(version);
|
|
94
|
+
packageSource = packageUrl ? parsePackageSource(packageUrl) : undefined;
|
|
95
|
+
if (parsed.kind === 'channel' && parsed.channelName === 's3' && !packageSource) {
|
|
96
|
+
throw new Error('--package-url is required for s3');
|
|
97
|
+
}
|
|
71
98
|
}
|
|
72
|
-
|
|
73
|
-
|
|
99
|
+
catch (e) {
|
|
100
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
101
|
+
error(msg);
|
|
102
|
+
emitter.end(false, 1, 'E_INVALID_ARGS', { error: msg });
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
emitter.start(`installing ${parsed.raw}@${safeVersion}`, { component: parsed.raw, version: safeVersion });
|
|
106
|
+
info(`Installing ${parsed.raw}@${safeVersion}...`);
|
|
107
|
+
try {
|
|
108
|
+
emitter.stepStart('check-deps', 'checking system dependencies');
|
|
109
|
+
const installer = getInstaller(parsed);
|
|
110
|
+
await installer.checkDeps();
|
|
111
|
+
emitter.stepDone('check-deps', 'dependencies ok');
|
|
112
|
+
emitter.stepStart('mirrors', 'configuring npm/pip mirrors');
|
|
113
|
+
await configureMirrors();
|
|
114
|
+
emitter.stepDone('mirrors', 'mirrors configured');
|
|
115
|
+
if (parsed.kind === 'openclaw') {
|
|
116
|
+
emitter.stepStart('preflight:purge-openviking', 'checking openviking residue');
|
|
117
|
+
try {
|
|
118
|
+
const detection = detectOpenviking();
|
|
119
|
+
if (detection.installed) {
|
|
120
|
+
info('Detected existing OpenViking, running phase A (stop + backup)...');
|
|
121
|
+
info(`Signals: ${JSON.stringify(detection.signals)}`);
|
|
122
|
+
await purgePhaseA(detection);
|
|
123
|
+
emitter.stepDone('preflight:purge-openviking', 'phase A done, cleanup deferred to install step');
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
emitter.stepDone('preflight:purge-openviking', 'no openviking, skipped');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
131
|
+
error(`Phase A failed: ${msg}`);
|
|
132
|
+
emitter.log('error', `phase A failed: ${msg}`);
|
|
133
|
+
emitter.end(false, 1, 'E_PURGE_A_FAILED', { error: msg });
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
emitter.stepStart('install', `installing ${parsed.raw}@${safeVersion}`);
|
|
138
|
+
await installer.install(safeVersion, packageSource);
|
|
139
|
+
emitter.stepDone('install', `${parsed.raw}@${safeVersion} installed`);
|
|
140
|
+
if (config) {
|
|
141
|
+
emitter.stepStart('configure', 'applying configuration');
|
|
142
|
+
await installer.configure(config);
|
|
143
|
+
emitter.stepDone('configure', 'configuration applied');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
info('No config provided, keeping existing configuration.');
|
|
147
|
+
}
|
|
148
|
+
success(`${parsed.raw}@${safeVersion} installed.`);
|
|
149
|
+
emitter.end(true, 0, undefined, { component: parsed.raw, version: safeVersion });
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
153
|
+
error(msg);
|
|
154
|
+
emitter.end(false, 1, 'E_INSTALL_FAILED', { error: msg });
|
|
155
|
+
process.exit(1);
|
|
74
156
|
}
|
|
75
|
-
success(`${component}@${version} installed.`);
|
|
76
157
|
}
|
|
77
158
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function migrationCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,205 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/commands/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { NdjsonEmitter } from '../output/ndjson.js';
|
|
2
|
+
export declare const OPENCLAW_WEIXIN_CHANNEL_ID = "openclaw-weixin";
|
|
3
|
+
export declare const WECHAT_PLUGIN_MISSING = "WECHAT_PLUGIN_MISSING";
|
|
4
|
+
export declare const WECHAT_QR_START_FAILED = "WECHAT_QR_START_FAILED";
|
|
5
|
+
export declare const WECHAT_QR_EXPIRED = "WECHAT_QR_EXPIRED";
|
|
6
|
+
export declare const WECHAT_LOGIN_FAILED = "WECHAT_LOGIN_FAILED";
|
|
7
|
+
export declare const WECHAT_CHANNEL_START_FAILED = "WECHAT_CHANNEL_START_FAILED";
|
|
8
|
+
type LoginOptions = {
|
|
9
|
+
channelId: string;
|
|
10
|
+
accountId: string;
|
|
11
|
+
force: boolean;
|
|
12
|
+
timeoutSeconds: number;
|
|
13
|
+
};
|
|
14
|
+
type ChannelGateway = {
|
|
15
|
+
loginWithQrStart?: (params: {
|
|
16
|
+
accountId?: string;
|
|
17
|
+
force?: boolean;
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
verbose?: boolean;
|
|
20
|
+
}) => Promise<{
|
|
21
|
+
qrDataUrl?: string;
|
|
22
|
+
message?: string;
|
|
23
|
+
sessionKey?: string;
|
|
24
|
+
connected?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
loginWithQrWait?: (params: {
|
|
27
|
+
accountId?: string;
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
currentQrDataUrl?: string;
|
|
30
|
+
sessionKey?: string;
|
|
31
|
+
}) => Promise<{
|
|
32
|
+
connected?: boolean;
|
|
33
|
+
alreadyConnected?: boolean;
|
|
34
|
+
message?: string;
|
|
35
|
+
accountId?: string;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
type ChannelPlugin = {
|
|
39
|
+
id?: string;
|
|
40
|
+
gateway?: ChannelGateway;
|
|
41
|
+
config?: {
|
|
42
|
+
listAccountIds?: (cfg: Record<string, unknown>) => string[];
|
|
43
|
+
resolveAccount?: (cfg: Record<string, unknown>, accountId?: string | null) => unknown;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
type LoginDeps = {
|
|
47
|
+
emitter: NdjsonEmitter;
|
|
48
|
+
loadPlugin?: (channelId: string) => Promise<ChannelPlugin>;
|
|
49
|
+
startChannel?: (channelId: string, accountId: string) => Promise<void>;
|
|
50
|
+
};
|
|
51
|
+
export declare function openclawChannelLoginCommand(args: string[]): Promise<void>;
|
|
52
|
+
export declare function parseOpenclawChannelLoginArgs(args: string[]): LoginOptions;
|
|
53
|
+
export declare function runOpenclawChannelLogin(options: LoginOptions, deps: LoginDeps): Promise<void>;
|
|
54
|
+
export {};
|