@okclaw-build/cli 1.0.0-beta.3 → 1.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/check.js +22 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/edit.d.ts +2 -7
- package/dist/commands/edit.js +28 -15
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/feed.d.ts +0 -9
- package/dist/commands/feed.js +80 -103
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/install.js +57 -9
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/service.js +65 -12
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/show.d.ts +13 -0
- package/dist/commands/show.js +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 +88 -5
- package/dist/index.js.map +1 -1
- package/dist/installers/base.d.ts +1 -0
- package/dist/installers/channel.d.ts +16 -1
- package/dist/installers/channel.js +121 -8
- package/dist/installers/channel.js.map +1 -1
- package/dist/installers/openclaw.d.ts +1 -0
- package/dist/installers/openclaw.js +72 -10
- 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 +1 -0
- package/dist/installers/skill.js +11 -1
- 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/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/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
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { cpSync as fsCpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync as fsRenameSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { basename, join } from 'node:path';
|
|
4
|
+
import { hostname as osHostname } from 'node:os';
|
|
5
|
+
import { shell as defaultShell } from '../utils/shell.js';
|
|
6
|
+
import { info, warn } from '../utils/logger.js';
|
|
7
|
+
import { OKCLAW_BACKUP_DIR, OPENCLAW_HOME } from '../utils/constants.js';
|
|
8
|
+
import { configGet as defaultConfigGet, configSet as defaultConfigSet, configUnset as defaultConfigUnset, configValidate as defaultConfigValidate, } from '../utils/openclaw-config-cli.js';
|
|
9
|
+
const OPENCLAW_CONFIG = `${OPENCLAW_HOME}/openclaw.json`;
|
|
10
|
+
const OPENVIKING_IDS = ['openviking', 'memory-openviking'];
|
|
11
|
+
const KEEP_PATHS = [
|
|
12
|
+
`${OPENCLAW_HOME}/openviking-venv`,
|
|
13
|
+
`${OPENCLAW_HOME}/openviking.env`,
|
|
14
|
+
`${OPENCLAW_HOME}/openviking-data`,
|
|
15
|
+
'/root/.openviking',
|
|
16
|
+
];
|
|
17
|
+
const WHITELIST_ENTRIES = ['feishu', 'qqbot', 'wecom', 'adp-openclaw', 'dingtalk'];
|
|
18
|
+
export const PURGE_PATHS = Object.freeze([
|
|
19
|
+
`${OPENCLAW_HOME}/extensions/openviking`,
|
|
20
|
+
`${OPENCLAW_HOME}/extensions/memory-openviking`,
|
|
21
|
+
]);
|
|
22
|
+
function asRecord(value) {
|
|
23
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
24
|
+
? value
|
|
25
|
+
: undefined;
|
|
26
|
+
}
|
|
27
|
+
function getPath(root, path) {
|
|
28
|
+
let cursor = root;
|
|
29
|
+
for (const part of path) {
|
|
30
|
+
const record = asRecord(cursor);
|
|
31
|
+
if (!record || !(part in record))
|
|
32
|
+
return undefined;
|
|
33
|
+
cursor = record[part];
|
|
34
|
+
}
|
|
35
|
+
return cursor;
|
|
36
|
+
}
|
|
37
|
+
function arrayIncludesId(value, id) {
|
|
38
|
+
return Array.isArray(value) && value.some((item) => item === id);
|
|
39
|
+
}
|
|
40
|
+
function isOpenvikingExtensionPath(value) {
|
|
41
|
+
return OPENVIKING_IDS.some((id) => value.endsWith(`/extensions/${id}`) || value.includes(`/extensions/${id}/`));
|
|
42
|
+
}
|
|
43
|
+
function arrayIncludesExtensionPath(value) {
|
|
44
|
+
return Array.isArray(value) && value.some((item) => (typeof item === 'string'
|
|
45
|
+
&& isOpenvikingExtensionPath(item)));
|
|
46
|
+
}
|
|
47
|
+
function hasOwn(record, key) {
|
|
48
|
+
return !!asRecord(record) && Object.prototype.hasOwnProperty.call(record, key);
|
|
49
|
+
}
|
|
50
|
+
function openvikingConfigHits(cfg) {
|
|
51
|
+
if (!cfg)
|
|
52
|
+
return [];
|
|
53
|
+
const hits = [];
|
|
54
|
+
for (const id of OPENVIKING_IDS) {
|
|
55
|
+
if (arrayIncludesId(getPath(cfg, ['plugins', 'allow']), id))
|
|
56
|
+
hits.push(`plugins.allow contains "${id}"`);
|
|
57
|
+
if (hasOwn(getPath(cfg, ['plugins', 'entries']), id))
|
|
58
|
+
hits.push(`plugins.entries.${id} present`);
|
|
59
|
+
if (hasOwn(getPath(cfg, ['plugins', 'installs']), id))
|
|
60
|
+
hits.push(`plugins.installs.${id} present`);
|
|
61
|
+
}
|
|
62
|
+
if (getPath(cfg, ['plugins', 'slots', 'contextEngine']) === 'openviking') {
|
|
63
|
+
hits.push('plugins.slots.contextEngine === "openviking"');
|
|
64
|
+
}
|
|
65
|
+
if (getPath(cfg, ['plugins', 'slots', 'memory']) === 'memory-openviking') {
|
|
66
|
+
hits.push('plugins.slots.memory === "memory-openviking"');
|
|
67
|
+
}
|
|
68
|
+
const loadPaths = getPath(cfg, ['plugins', 'load', 'paths']);
|
|
69
|
+
if (Array.isArray(loadPaths)) {
|
|
70
|
+
for (const item of loadPaths) {
|
|
71
|
+
if (typeof item === 'string' && isOpenvikingExtensionPath(item)) {
|
|
72
|
+
hits.push(`plugins.load.paths contains "${item}"`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return hits;
|
|
77
|
+
}
|
|
78
|
+
function hasOpenvikingConfig(cfg) {
|
|
79
|
+
return openvikingConfigHits(cfg).length > 0;
|
|
80
|
+
}
|
|
81
|
+
function readConfigFile() {
|
|
82
|
+
try {
|
|
83
|
+
return JSON.parse(readFileSync(OPENCLAW_CONFIG, 'utf8'));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function pgrepOpenviking() {
|
|
90
|
+
try {
|
|
91
|
+
const stdout = execFileSync('pgrep', ['-f', 'openviking.server.bootstrap'], {
|
|
92
|
+
encoding: 'utf8',
|
|
93
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
94
|
+
});
|
|
95
|
+
const firstPid = stdout.trim().split(/\s+/)[0];
|
|
96
|
+
const pid = Number(firstPid);
|
|
97
|
+
return Number.isFinite(pid) ? pid : undefined;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function defaultDetectDeps() {
|
|
104
|
+
return {
|
|
105
|
+
fileExists: existsSync,
|
|
106
|
+
readOpenclawConfig: readConfigFile,
|
|
107
|
+
pgrepOpenviking,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function mergeDetectDeps(deps = {}) {
|
|
111
|
+
return { ...defaultDetectDeps(), ...deps };
|
|
112
|
+
}
|
|
113
|
+
export function detectOpenviking(deps = {}) {
|
|
114
|
+
const actual = mergeDetectDeps(deps);
|
|
115
|
+
const cfg = actual.readOpenclawConfig();
|
|
116
|
+
const extensionsDir = PURGE_PATHS.filter((path) => actual.fileExists(path));
|
|
117
|
+
const configHasPlugin = hasOpenvikingConfig(cfg);
|
|
118
|
+
const runningPid = actual.pgrepOpenviking();
|
|
119
|
+
return {
|
|
120
|
+
installed: configHasPlugin || extensionsDir.length > 0,
|
|
121
|
+
signals: {
|
|
122
|
+
configHasPlugin,
|
|
123
|
+
extensionsDir,
|
|
124
|
+
...(runningPid === undefined ? {} : { runningPid }),
|
|
125
|
+
venvDir: actual.fileExists(`${OPENCLAW_HOME}/openviking-venv`),
|
|
126
|
+
envFile: actual.fileExists(`${OPENCLAW_HOME}/openviking.env`),
|
|
127
|
+
serverHome: actual.fileExists('/root/.openviking'),
|
|
128
|
+
dataDir: actual.fileExists(`${OPENCLAW_HOME}/openviking-data`),
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function phaseADeps(deps = {}) {
|
|
133
|
+
return {
|
|
134
|
+
...mergeDetectDeps(deps),
|
|
135
|
+
shell: defaultShell,
|
|
136
|
+
cpSync: fsCpSync,
|
|
137
|
+
mkdirpSync: (path) => mkdirSync(path, { recursive: true }),
|
|
138
|
+
writeFile: (path, content) => writeFileSync(path, content, 'utf8'),
|
|
139
|
+
hostname: osHostname,
|
|
140
|
+
now: () => new Date(),
|
|
141
|
+
...deps,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function backupTimestamp(now) {
|
|
145
|
+
return now.toISOString().replace(/[-:.TZ]/g, '').slice(0, 14);
|
|
146
|
+
}
|
|
147
|
+
export async function purgePhaseA(detection, deps = {}) {
|
|
148
|
+
if (!detection.installed)
|
|
149
|
+
return { skipped: true };
|
|
150
|
+
const actual = phaseADeps(deps);
|
|
151
|
+
for (const cmd of [
|
|
152
|
+
'okclaw stop 2>/dev/null || true',
|
|
153
|
+
"pkill -f 'openviking.server.bootstrap' 2>/dev/null || true",
|
|
154
|
+
]) {
|
|
155
|
+
try {
|
|
156
|
+
await actual.shell(cmd);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Best-effort only. Backup must still be created so phase B can restore config.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const now = actual.now();
|
|
163
|
+
const backupDir = `${OKCLAW_BACKUP_DIR}/openclaw-config-purge-${backupTimestamp(now)}`;
|
|
164
|
+
actual.mkdirpSync(backupDir);
|
|
165
|
+
let configBackup = false;
|
|
166
|
+
if (actual.fileExists(OPENCLAW_CONFIG)) {
|
|
167
|
+
actual.cpSync(OPENCLAW_CONFIG, `${backupDir}/openclaw.json`);
|
|
168
|
+
configBackup = true;
|
|
169
|
+
}
|
|
170
|
+
actual.writeFile(`${backupDir}/purge-manifest.json`, `${JSON.stringify({
|
|
171
|
+
ts: now.toISOString(),
|
|
172
|
+
hostname: actual.hostname(),
|
|
173
|
+
detection,
|
|
174
|
+
configBackup,
|
|
175
|
+
willDelete: PURGE_PATHS,
|
|
176
|
+
willKeep: KEEP_PATHS,
|
|
177
|
+
stage: 'A - backup before npm install',
|
|
178
|
+
}, null, 2)}\n`);
|
|
179
|
+
return { skipped: false, backupDir };
|
|
180
|
+
}
|
|
181
|
+
function findLatestBackupDir() {
|
|
182
|
+
try {
|
|
183
|
+
return readdirSync(OKCLAW_BACKUP_DIR)
|
|
184
|
+
.filter((name) => name.startsWith('openclaw-config-purge-'))
|
|
185
|
+
.sort()
|
|
186
|
+
.reverse()
|
|
187
|
+
.map((name) => join(OKCLAW_BACKUP_DIR, name))[0];
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function phaseBDeps(deps = {}) {
|
|
194
|
+
return {
|
|
195
|
+
...mergeDetectDeps(deps),
|
|
196
|
+
configGet: defaultConfigGet,
|
|
197
|
+
configSet: defaultConfigSet,
|
|
198
|
+
configUnset: defaultConfigUnset,
|
|
199
|
+
configValidate: defaultConfigValidate,
|
|
200
|
+
cpSync: fsCpSync,
|
|
201
|
+
renameSync: fsRenameSync,
|
|
202
|
+
mkdirpSync: (path) => mkdirSync(path, { recursive: true }),
|
|
203
|
+
lstat: (path) => {
|
|
204
|
+
try {
|
|
205
|
+
return lstatSync(path);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
findLatestBackupDir,
|
|
212
|
+
purgePaths: PURGE_PATHS,
|
|
213
|
+
now: () => new Date(),
|
|
214
|
+
...deps,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function arrayWithoutOpenviking(configPath, value) {
|
|
218
|
+
if (value === undefined)
|
|
219
|
+
return []; // path not present in config — treat as empty
|
|
220
|
+
if (!Array.isArray(value)) {
|
|
221
|
+
// Anything else (raw string fallback from configGet, plain object, etc.) is a
|
|
222
|
+
// schema violation we should surface — silent skip historically masked failed
|
|
223
|
+
// sets and let phase B "succeed" while leaving openviking refs in load.paths.
|
|
224
|
+
throw new Error(`expected ${configPath} to be an array, got ${typeof value}: ${JSON.stringify(value).slice(0, 80)}`);
|
|
225
|
+
}
|
|
226
|
+
return value.filter((item) => (typeof item === 'string'
|
|
227
|
+
&& !OPENVIKING_IDS.includes(item)
|
|
228
|
+
&& !isOpenvikingExtensionPath(item)));
|
|
229
|
+
}
|
|
230
|
+
function removeFromAllow(deps) {
|
|
231
|
+
const raw = deps.configGet('plugins.allow');
|
|
232
|
+
if (raw === undefined)
|
|
233
|
+
return; // allow array doesn't exist, nothing to filter
|
|
234
|
+
const allow = arrayWithoutOpenviking('plugins.allow', raw);
|
|
235
|
+
deps.configSet('plugins.allow', JSON.stringify(allow));
|
|
236
|
+
}
|
|
237
|
+
function unsetIfPresent(deps, path) {
|
|
238
|
+
if (deps.configGet(path) !== undefined)
|
|
239
|
+
deps.configUnset(path);
|
|
240
|
+
}
|
|
241
|
+
function removeEntries(deps) {
|
|
242
|
+
for (const id of OPENVIKING_IDS)
|
|
243
|
+
unsetIfPresent(deps, `plugins.entries.${id}`);
|
|
244
|
+
}
|
|
245
|
+
function removeInstalls(deps) {
|
|
246
|
+
for (const id of OPENVIKING_IDS)
|
|
247
|
+
unsetIfPresent(deps, `plugins.installs.${id}`);
|
|
248
|
+
}
|
|
249
|
+
function removeFromLoadPaths(deps) {
|
|
250
|
+
const raw = deps.configGet('plugins.load.paths');
|
|
251
|
+
if (raw === undefined)
|
|
252
|
+
return;
|
|
253
|
+
const paths = arrayWithoutOpenviking('plugins.load.paths', raw);
|
|
254
|
+
deps.configSet('plugins.load.paths', JSON.stringify(paths));
|
|
255
|
+
}
|
|
256
|
+
function resetContextEngineSlot(deps) {
|
|
257
|
+
if (deps.configGet('plugins.slots.contextEngine') === 'openviking') {
|
|
258
|
+
deps.configSet('plugins.slots.contextEngine', JSON.stringify('legacy'));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function setMemorySlot(deps) {
|
|
262
|
+
deps.configSet('plugins.slots.memory', JSON.stringify('memory-core'));
|
|
263
|
+
}
|
|
264
|
+
function assertSafePurgePath(path) {
|
|
265
|
+
if (!path.startsWith(`${OPENCLAW_HOME}/extensions/`) || path.includes('..')) {
|
|
266
|
+
throw new Error(`unsafe path for openviking purge: ${path}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Move (not delete) the openviking extension dirs out of the openclaw extensions
|
|
270
|
+
// path so openclaw stops loading them, but keep the bytes recoverable under
|
|
271
|
+
// /tmp/okclaw-purged-extensions-${ts}/. Runs as the LAST phase B step (after
|
|
272
|
+
// assertPurged), so a config-only failure can't leave half-moved extensions.
|
|
273
|
+
// Returns the destination dir if anything was moved, undefined if nothing existed.
|
|
274
|
+
function movePurgePaths(deps) {
|
|
275
|
+
const ts = backupTimestamp(deps.now());
|
|
276
|
+
const purgedDir = `/tmp/okclaw-purged-extensions-${ts}`;
|
|
277
|
+
let moved = false;
|
|
278
|
+
for (const path of deps.purgePaths ?? PURGE_PATHS) {
|
|
279
|
+
assertSafePurgePath(path);
|
|
280
|
+
const stat = deps.lstat(path);
|
|
281
|
+
if (!stat)
|
|
282
|
+
continue;
|
|
283
|
+
if (stat.isSymbolicLink()) {
|
|
284
|
+
throw new Error(`refuse to move symlink during openviking purge: ${path}`);
|
|
285
|
+
}
|
|
286
|
+
if (!moved) {
|
|
287
|
+
deps.mkdirpSync(purgedDir);
|
|
288
|
+
moved = true;
|
|
289
|
+
}
|
|
290
|
+
deps.renameSync(path, `${purgedDir}/${basename(path)}`);
|
|
291
|
+
}
|
|
292
|
+
return moved ? purgedDir : undefined;
|
|
293
|
+
}
|
|
294
|
+
function assertExtensionsMoved(deps) {
|
|
295
|
+
for (const path of deps.purgePaths ?? PURGE_PATHS) {
|
|
296
|
+
if (deps.fileExists(path)) {
|
|
297
|
+
throw new Error(`openviking extension path still present after move: ${path}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function backupHasConfig(backupDir, deps) {
|
|
302
|
+
const manifestPath = `${backupDir}/purge-manifest.json`;
|
|
303
|
+
if (deps.fileExists(manifestPath)) {
|
|
304
|
+
try {
|
|
305
|
+
const content = deps.readFile ? deps.readFile(manifestPath) : readFileSync(manifestPath, 'utf8');
|
|
306
|
+
const manifest = JSON.parse(content);
|
|
307
|
+
if (manifest.configBackup === false)
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
// Fall back to checking the actual backup file.
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return deps.fileExists(`${backupDir}/openclaw.json`);
|
|
315
|
+
}
|
|
316
|
+
// Validate the **config side** of phase B. Extension dirs are intentionally not
|
|
317
|
+
// checked here — they are moved AFTER assertPurged passes (so a config-clean
|
|
318
|
+
// state never leaves us with half-moved extension dirs). Use assertExtensionsMoved
|
|
319
|
+
// after movePurgePaths to verify the filesystem side.
|
|
320
|
+
export function assertPurged(deps = {}) {
|
|
321
|
+
const actual = phaseBDeps(deps);
|
|
322
|
+
if (!actual.configValidate())
|
|
323
|
+
throw new Error('openclaw config validate failed AFTER phase B');
|
|
324
|
+
// Read the actual on-disk config (not the cached detection) so the error
|
|
325
|
+
// message names the exact key path that is still polluted — necessary for
|
|
326
|
+
// diagnosing why phase B's set/unset did not take effect.
|
|
327
|
+
const cfg = actual.readOpenclawConfig();
|
|
328
|
+
const hits = openvikingConfigHits(cfg);
|
|
329
|
+
if (hits.length > 0) {
|
|
330
|
+
throw new Error(`openviking config residue remains:\n - ${hits.join('\n - ')}`);
|
|
331
|
+
}
|
|
332
|
+
if (actual.configGet('plugins.slots.memory') !== 'memory-core') {
|
|
333
|
+
throw new Error('slot memory should be "memory-core"');
|
|
334
|
+
}
|
|
335
|
+
for (const entry of WHITELIST_ENTRIES) {
|
|
336
|
+
if (actual.configGet(`plugins.entries.${entry}`) === undefined) {
|
|
337
|
+
warn(`expected bundled/known plugin entry missing after openviking purge: ${entry}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
export async function purgePhaseB(deps = {}) {
|
|
342
|
+
const actual = phaseBDeps(deps);
|
|
343
|
+
const detection = detectOpenviking(actual);
|
|
344
|
+
if (!detection.installed)
|
|
345
|
+
return;
|
|
346
|
+
if (!actual.configValidate()) {
|
|
347
|
+
throw new Error('openclaw config validate failed BEFORE phase B');
|
|
348
|
+
}
|
|
349
|
+
const backupDir = actual.findLatestBackupDir();
|
|
350
|
+
if (!backupDir) {
|
|
351
|
+
throw new Error('phase B started without phase A backup');
|
|
352
|
+
}
|
|
353
|
+
const canRestore = backupHasConfig(backupDir, actual);
|
|
354
|
+
try {
|
|
355
|
+
// 1. clean config first (set/unset 6 helpers)
|
|
356
|
+
removeFromAllow(actual);
|
|
357
|
+
removeEntries(actual);
|
|
358
|
+
removeInstalls(actual);
|
|
359
|
+
removeFromLoadPaths(actual);
|
|
360
|
+
resetContextEngineSlot(actual);
|
|
361
|
+
setMemorySlot(actual);
|
|
362
|
+
// 2. validate config side BEFORE touching the filesystem — extension dirs
|
|
363
|
+
// only get moved if the config is provably clean (朱敏 2026-04-27)
|
|
364
|
+
assertPurged(actual);
|
|
365
|
+
// 3. last step: mv extension dirs to /tmp/okclaw-purged-extensions-${ts}/
|
|
366
|
+
// (recoverable, not rm -rf), then verify dirs gone from extensions/
|
|
367
|
+
const purgedDir = movePurgePaths(actual);
|
|
368
|
+
assertExtensionsMoved(actual);
|
|
369
|
+
if (purgedDir)
|
|
370
|
+
info(`Moved openviking extensions to ${purgedDir}`);
|
|
371
|
+
}
|
|
372
|
+
catch (err) {
|
|
373
|
+
if (canRestore) {
|
|
374
|
+
actual.cpSync(`${backupDir}/openclaw.json`, OPENCLAW_CONFIG);
|
|
375
|
+
info(`Restored openclaw.json from ${basename(backupDir)} after openviking purge failure.`);
|
|
376
|
+
}
|
|
377
|
+
throw err;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=openviking-purge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openviking-purge.js","sourceRoot":"","sources":["../../src/installers/openviking-purge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, mkdirSync, existsSync, cpSync, rmSync } from 'node:fs';
|
|
2
2
|
import { shell, shellCapture } from '../utils/shell.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ensureCommand, checkDiskSpace } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
5
5
|
import { OPENCLAW_HOME, OPENVIKING_HOME, OPENVIKING_CONF, OPENVIKING_ENV, OPENVIKING_PORT, OKCLAW_BACKUP_DIR, PIP_INDEX_URL, PIP_TRUSTED_HOST, NPM_REGISTRY, JSDELIVR_GH, OPENVIKING_REPO, OPENVIKING_PLUGIN_DIR, OPENVIKING_PLUGIN_REQUIRED_FILES, OPENVIKING_PLUGIN_OPTIONAL_FILES, } from '../utils/constants.js';
|
|
6
6
|
/**
|
|
@@ -16,7 +16,6 @@ export class OpenvikingInstaller {
|
|
|
16
16
|
async checkDeps() {
|
|
17
17
|
await checkDiskSpace(800);
|
|
18
18
|
await ensureCommand('openclaw');
|
|
19
|
-
await ensurePython();
|
|
20
19
|
}
|
|
21
20
|
async install(version, packageUrl) {
|
|
22
21
|
// --- Step 1: pip install openviking ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openviking.js","sourceRoot":"","sources":["../../src/installers/openviking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE7F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openviking.js","sourceRoot":"","sources":["../../src/installers/openviking.ts"],"names":[],"mappings":"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"}
|
package/dist/installers/skill.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
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 {
|
|
@@ -51,5 +51,15 @@ export class SkillInstaller {
|
|
|
51
51
|
async configure(_config) {
|
|
52
52
|
// Skills don't need extra configuration
|
|
53
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
|
+
}
|
|
54
64
|
}
|
|
55
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,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,
|
|
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;
|