@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.
Files changed (130) hide show
  1. package/dist/bridge/daemon/channel-auth-runtime.d.ts +16 -0
  2. package/dist/bridge/daemon/channel-auth-runtime.js +2 -0
  3. package/dist/bridge/daemon/channel-auth-runtime.js.map +1 -0
  4. package/dist/bridge/daemon/config.d.ts +24 -0
  5. package/dist/bridge/daemon/config.js +96 -0
  6. package/dist/bridge/daemon/config.js.map +1 -0
  7. package/dist/bridge/daemon/daemon.d.ts +7 -0
  8. package/dist/bridge/daemon/daemon.js +32 -0
  9. package/dist/bridge/daemon/daemon.js.map +1 -0
  10. package/dist/bridge/daemon/event-id.d.ts +2 -0
  11. package/dist/bridge/daemon/event-id.js +18 -0
  12. package/dist/bridge/daemon/event-id.js.map +1 -0
  13. package/dist/bridge/daemon/frames.d.ts +81 -0
  14. package/dist/bridge/daemon/frames.js +64 -0
  15. package/dist/bridge/daemon/frames.js.map +1 -0
  16. package/dist/bridge/daemon/openclaw-chat-runtime.d.ts +80 -0
  17. package/dist/bridge/daemon/openclaw-chat-runtime.js +1222 -0
  18. package/dist/bridge/daemon/openclaw-chat-runtime.js.map +1 -0
  19. package/dist/bridge/daemon/openclaw-gateway-client.d.ts +58 -0
  20. package/dist/bridge/daemon/openclaw-gateway-client.js +251 -0
  21. package/dist/bridge/daemon/openclaw-gateway-client.js.map +1 -0
  22. package/dist/bridge/daemon/openclaw-weixin-auth-runtime.d.ts +28 -0
  23. package/dist/bridge/daemon/openclaw-weixin-auth-runtime.js +266 -0
  24. package/dist/bridge/daemon/openclaw-weixin-auth-runtime.js.map +1 -0
  25. package/dist/bridge/daemon/openclaw-weixin-plugin.d.ts +67 -0
  26. package/dist/bridge/daemon/openclaw-weixin-plugin.js +196 -0
  27. package/dist/bridge/daemon/openclaw-weixin-plugin.js.map +1 -0
  28. package/dist/bridge/daemon/relay-client.d.ts +79 -0
  29. package/dist/bridge/daemon/relay-client.js +396 -0
  30. package/dist/bridge/daemon/relay-client.js.map +1 -0
  31. package/dist/bridge/daemon/stub-chat-runtime.d.ts +4 -0
  32. package/dist/bridge/daemon/stub-chat-runtime.js +91 -0
  33. package/dist/bridge/daemon/stub-chat-runtime.js.map +1 -0
  34. package/dist/bridge/service.d.ts +12 -0
  35. package/dist/bridge/service.js +86 -0
  36. package/dist/bridge/service.js.map +1 -0
  37. package/dist/commands/backup.d.ts +16 -0
  38. package/dist/commands/backup.js +99 -0
  39. package/dist/commands/backup.js.map +1 -0
  40. package/dist/commands/bridge.d.ts +7 -0
  41. package/dist/commands/bridge.js +100 -0
  42. package/dist/commands/bridge.js.map +1 -0
  43. package/dist/commands/check.js +22 -6
  44. package/dist/commands/check.js.map +1 -1
  45. package/dist/commands/edit.d.ts +2 -7
  46. package/dist/commands/edit.js +28 -16
  47. package/dist/commands/edit.js.map +1 -1
  48. package/dist/commands/feed.js +48 -16
  49. package/dist/commands/feed.js.map +1 -1
  50. package/dist/commands/install.js +99 -18
  51. package/dist/commands/install.js.map +1 -1
  52. package/dist/commands/migration.d.ts +1 -0
  53. package/dist/commands/migration.js +205 -0
  54. package/dist/commands/migration.js.map +1 -0
  55. package/dist/commands/openclaw-channel-login.d.ts +54 -0
  56. package/dist/commands/openclaw-channel-login.js +334 -0
  57. package/dist/commands/openclaw-channel-login.js.map +1 -0
  58. package/dist/commands/restore.d.ts +16 -0
  59. package/dist/commands/restore.js +94 -0
  60. package/dist/commands/restore.js.map +1 -0
  61. package/dist/commands/service.js +56 -13
  62. package/dist/commands/service.js.map +1 -1
  63. package/dist/commands/show.d.ts +13 -0
  64. package/dist/commands/show.js +70 -0
  65. package/dist/commands/show.js.map +1 -0
  66. package/dist/commands/skill.d.ts +1 -0
  67. package/dist/commands/skill.js +137 -0
  68. package/dist/commands/skill.js.map +1 -0
  69. package/dist/commands/uninstall.d.ts +1 -0
  70. package/dist/commands/uninstall.js +46 -0
  71. package/dist/commands/uninstall.js.map +1 -0
  72. package/dist/index.js +116 -12
  73. package/dist/index.js.map +1 -1
  74. package/dist/installers/base.d.ts +3 -1
  75. package/dist/installers/channel.d.ts +10 -2
  76. package/dist/installers/channel.js +143 -24
  77. package/dist/installers/channel.js.map +1 -1
  78. package/dist/installers/openclaw.d.ts +20 -2
  79. package/dist/installers/openclaw.js +201 -55
  80. package/dist/installers/openclaw.js.map +1 -1
  81. package/dist/installers/openviking-purge.d.ts +52 -0
  82. package/dist/installers/openviking-purge.js +380 -0
  83. package/dist/installers/openviking-purge.js.map +1 -0
  84. package/dist/installers/openviking.js +1 -2
  85. package/dist/installers/openviking.js.map +1 -1
  86. package/dist/installers/skill.d.ts +5 -2
  87. package/dist/installers/skill.js +67 -18
  88. package/dist/installers/skill.js.map +1 -1
  89. package/dist/migration/archive.d.ts +14 -0
  90. package/dist/migration/archive.js +84 -0
  91. package/dist/migration/archive.js.map +1 -0
  92. package/dist/migration/crypto.d.ts +16 -0
  93. package/dist/migration/crypto.js +56 -0
  94. package/dist/migration/crypto.js.map +1 -0
  95. package/dist/migration/manifest.d.ts +39 -0
  96. package/dist/migration/manifest.js +140 -0
  97. package/dist/migration/manifest.js.map +1 -0
  98. package/dist/openclaw-user-data.d.ts +86 -0
  99. package/dist/openclaw-user-data.js +422 -0
  100. package/dist/openclaw-user-data.js.map +1 -0
  101. package/dist/output/mode.d.ts +11 -0
  102. package/dist/output/mode.js +27 -0
  103. package/dist/output/mode.js.map +1 -0
  104. package/dist/output/ndjson.d.ts +57 -0
  105. package/dist/output/ndjson.js +136 -0
  106. package/dist/output/ndjson.js.map +1 -0
  107. package/dist/utils/constants.d.ts +14 -13
  108. package/dist/utils/constants.js +40 -21
  109. package/dist/utils/constants.js.map +1 -1
  110. package/dist/utils/deps.d.ts +34 -3
  111. package/dist/utils/deps.js +62 -100
  112. package/dist/utils/deps.js.map +1 -1
  113. package/dist/utils/install-safety.d.ts +25 -0
  114. package/dist/utils/install-safety.js +97 -0
  115. package/dist/utils/install-safety.js.map +1 -0
  116. package/dist/utils/logger.d.ts +10 -0
  117. package/dist/utils/logger.js +31 -4
  118. package/dist/utils/logger.js.map +1 -1
  119. package/dist/utils/mirror.js +14 -0
  120. package/dist/utils/mirror.js.map +1 -1
  121. package/dist/utils/openclaw-config-cli.d.ts +19 -0
  122. package/dist/utils/openclaw-config-cli.js +81 -0
  123. package/dist/utils/openclaw-config-cli.js.map +1 -0
  124. package/dist/utils/openclaw-daemon.d.ts +58 -0
  125. package/dist/utils/openclaw-daemon.js +154 -0
  126. package/dist/utils/openclaw-daemon.js.map +1 -0
  127. package/dist/utils/shell.d.ts +23 -2
  128. package/dist/utils/shell.js +138 -5
  129. package/dist/utils/shell.js.map +1 -1
  130. package/package.json +6 -4
@@ -0,0 +1 @@
1
+ export declare function skillCommand(args: string[]): Promise<void>;
@@ -0,0 +1,137 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { SkillInstaller } from '../installers/skill.js';
3
+ import { configureMirrors } from '../utils/mirror.js';
4
+ import { info, error, success } from '../utils/logger.js';
5
+ import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
6
+ import { assertSafeInstallName, assertSafePackageVersion, parsePackageSource, } from '../utils/install-safety.js';
7
+ export async function skillCommand(args) {
8
+ const subCommand = args[0];
9
+ const skillName = args[1];
10
+ if (!subCommand || !['install', 'uninstall'].includes(subCommand)) {
11
+ const emitter = new NdjsonEmitter('skill_install');
12
+ registerExitHandlers(emitter);
13
+ error('Usage: okclaw skill <install|uninstall> <name> [options]');
14
+ emitter.end(false, 1, 'E_USAGE');
15
+ process.exit(1);
16
+ }
17
+ const op = subCommand === 'install' ? 'skill_install' : 'skill_uninstall';
18
+ const emitter = new NdjsonEmitter(op);
19
+ registerExitHandlers(emitter);
20
+ if (!skillName) {
21
+ error(`Usage: okclaw skill ${subCommand} <name>${subCommand === 'install' ? ' --version <ver> [--package-url <url>]' : ''}`);
22
+ emitter.end(false, 1, 'E_USAGE');
23
+ process.exit(1);
24
+ }
25
+ let safeSkillName;
26
+ try {
27
+ safeSkillName = assertSafeInstallName('skill', skillName);
28
+ }
29
+ catch (e) {
30
+ const msg = e instanceof Error ? e.message : String(e);
31
+ error(msg);
32
+ emitter.end(false, 1, 'E_INVALID_ARGS', { error: msg });
33
+ process.exit(1);
34
+ }
35
+ const installer = new SkillInstaller(safeSkillName);
36
+ if (subCommand === 'uninstall') {
37
+ emitter.start(`uninstalling skill ${safeSkillName}`, { skillName: safeSkillName });
38
+ info(`Uninstalling skill ${safeSkillName}...`);
39
+ try {
40
+ emitter.stepStart('validate', `validating skill name ${safeSkillName}`);
41
+ // installer 内部校验名称,SkillInstaller.uninstall 会在目标不存在时快速返回
42
+ emitter.stepDone('validate', 'skill name ok');
43
+ emitter.stepStart('uninstall', `removing ${safeSkillName}`);
44
+ await installer.uninstall();
45
+ emitter.stepDone('uninstall', 'skill removed');
46
+ success(`Skill ${safeSkillName} uninstalled.`);
47
+ emitter.end(true, 0, undefined, { skillName: safeSkillName });
48
+ }
49
+ catch (e) {
50
+ const msg = e instanceof Error ? e.message : String(e);
51
+ error(msg);
52
+ emitter.end(false, 1, 'E_SKILL_UNINSTALL_FAILED', { error: msg });
53
+ process.exit(1);
54
+ }
55
+ return;
56
+ }
57
+ // install
58
+ let version = '';
59
+ let config;
60
+ let packageUrl;
61
+ for (let i = 2; i < args.length; i++) {
62
+ const arg = args[i];
63
+ if ((arg === '--version' || arg.startsWith('--version=')) && !version) {
64
+ version = arg.includes('=') ? arg.split('=')[1] : args[++i];
65
+ continue;
66
+ }
67
+ if (arg === '--config' && args[i + 1]) {
68
+ try {
69
+ config = JSON.parse(args[++i]);
70
+ }
71
+ catch {
72
+ error('Invalid --config JSON');
73
+ emitter.end(false, 1, 'E_CONFIG_JSON');
74
+ process.exit(1);
75
+ }
76
+ continue;
77
+ }
78
+ if ((arg === '--config-file' || arg.startsWith('--config-file=')) && !config) {
79
+ const filePath = arg.includes('=') ? arg.split('=')[1] : args[++i];
80
+ try {
81
+ config = JSON.parse(readFileSync(filePath, 'utf8'));
82
+ }
83
+ catch (e) {
84
+ error(`Failed to read config file: ${e}`);
85
+ emitter.end(false, 1, 'E_CONFIG_FILE');
86
+ process.exit(1);
87
+ }
88
+ continue;
89
+ }
90
+ if ((arg === '--package-url' || arg.startsWith('--package-url=')) && !packageUrl) {
91
+ packageUrl = arg.includes('=') ? arg.split('=')[1] : args[++i];
92
+ continue;
93
+ }
94
+ }
95
+ if (!version) {
96
+ error('--version is required for install');
97
+ emitter.end(false, 1, 'E_VERSION_REQUIRED');
98
+ process.exit(1);
99
+ }
100
+ let safeVersion;
101
+ let packageSource;
102
+ try {
103
+ safeVersion = assertSafePackageVersion(version);
104
+ packageSource = packageUrl ? parsePackageSource(packageUrl) : undefined;
105
+ }
106
+ catch (e) {
107
+ const msg = e instanceof Error ? e.message : String(e);
108
+ error(msg);
109
+ emitter.end(false, 1, 'E_INVALID_ARGS', { error: msg });
110
+ process.exit(1);
111
+ }
112
+ emitter.start(`installing skill ${safeSkillName}@${safeVersion}`, { skillName: safeSkillName, version: safeVersion });
113
+ info(`Installing skill ${safeSkillName}@${safeVersion}...`);
114
+ try {
115
+ emitter.stepStart('validate', 'validating install args');
116
+ await installer.checkDeps();
117
+ emitter.stepDone('validate', 'args ok, deps ready');
118
+ emitter.stepStart('download', `downloading skill ${safeSkillName}@${safeVersion}`);
119
+ await configureMirrors();
120
+ await installer.install(safeVersion, packageSource);
121
+ emitter.stepDone('download', 'skill downloaded');
122
+ emitter.stepStart('install', `applying skill ${safeSkillName}`);
123
+ if (config) {
124
+ await installer.configure(config);
125
+ }
126
+ emitter.stepDone('install', 'skill installed');
127
+ success(`Skill ${safeSkillName}@${safeVersion} installed.`);
128
+ emitter.end(true, 0, undefined, { skillName: safeSkillName, version: safeVersion });
129
+ }
130
+ catch (e) {
131
+ const msg = e instanceof Error ? e.message : String(e);
132
+ error(msg);
133
+ emitter.end(false, 1, 'E_SKILL_INSTALL_FAILED', { error: msg });
134
+ process.exit(1);
135
+ }
136
+ }
137
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function uninstallCommand(args: string[]): Promise<void>;
@@ -0,0 +1,46 @@
1
+ import { OpenclawInstaller } from '../installers/openclaw.js';
2
+ import { error, info, success } from '../utils/logger.js';
3
+ import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
4
+ function getInstaller(component) {
5
+ switch (component) {
6
+ case 'openclaw': return new OpenclawInstaller();
7
+ default: return null;
8
+ }
9
+ }
10
+ export async function uninstallCommand(args) {
11
+ const emitter = new NdjsonEmitter('uninstall');
12
+ registerExitHandlers(emitter);
13
+ const component = args[0];
14
+ if (!component) {
15
+ error('Usage: okclaw uninstall <component>');
16
+ emitter.end(false, 1, 'E_USAGE');
17
+ process.exit(1);
18
+ }
19
+ const installer = getInstaller(component);
20
+ if (!installer) {
21
+ error(`Uninstall not supported for component: ${component}`);
22
+ emitter.end(false, 1, 'E_UNSUPPORTED');
23
+ process.exit(1);
24
+ }
25
+ if (!installer.uninstall) {
26
+ error(`Component ${component} does not support uninstall`);
27
+ emitter.end(false, 1, 'E_UNSUPPORTED');
28
+ process.exit(1);
29
+ }
30
+ emitter.start(`uninstalling ${component}`, { component });
31
+ info(`Uninstalling ${component}...`);
32
+ try {
33
+ emitter.stepStart('uninstall', `running uninstall for ${component}`);
34
+ await installer.uninstall();
35
+ emitter.stepDone('uninstall', `${component} uninstalled`);
36
+ success(`${component} uninstalled.`);
37
+ emitter.end(true, 0, undefined, { component });
38
+ }
39
+ catch (e) {
40
+ const msg = e instanceof Error ? e.message : String(e);
41
+ error(msg);
42
+ emitter.end(false, 1, 'E_UNINSTALL_FAILED', { error: msg });
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,SAAS,YAAY,CAAC,SAAiB;IACrC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC;QAChD,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAc;IACnD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IAC/C,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,aAAa,SAAS,6BAA6B,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,gBAAgB,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,SAAS,KAAK,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,yBAAyB,SAAS,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,SAAS,eAAe,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -1,21 +1,77 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { installCommand } from './commands/install.js';
3
+ import { uninstallCommand } from './commands/uninstall.js';
3
4
  import { checkCommand } from './commands/check.js';
4
5
  import { editCommand } from './commands/edit.js';
6
+ import { showCommand } from './commands/show.js';
5
7
  import { feedCommand } from './commands/feed.js';
8
+ import { backupCommand } from './commands/backup.js';
9
+ import { restoreCommand } from './commands/restore.js';
6
10
  import { startCommand, stopCommand, restartCommand, statusCommand } from './commands/service.js';
11
+ import { skillCommand } from './commands/skill.js';
12
+ import { bridgeCommand } from './commands/bridge.js';
7
13
  import { ensureRoot } from './utils/shell.js';
8
14
  import { error } from './utils/logger.js';
9
- const [command, ...args] = process.argv.slice(2);
15
+ import { setNdjsonPath, setOutputMode, isNdjson } from './output/mode.js';
16
+ import { getActiveEmitter, NdjsonEmitter } from './output/ndjson.js';
17
+ /**
18
+ * 从 argv 里抽出全局 flag --output=<mode> 和 --op-id=<uuid>,返回剩余参数。
19
+ * 支持 "--flag=value" 与 "--flag value" 两种写法。
20
+ */
21
+ function extractGlobalFlags(argv) {
22
+ const rest = [];
23
+ let output = 'text';
24
+ let opId;
25
+ let ndjsonPath;
26
+ for (let i = 0; i < argv.length; i++) {
27
+ const arg = argv[i];
28
+ if (arg === '--output' && argv[i + 1]) {
29
+ output = argv[++i] === 'ndjson' ? 'ndjson' : 'text';
30
+ continue;
31
+ }
32
+ if (arg.startsWith('--output=')) {
33
+ output = arg.slice('--output='.length) === 'ndjson' ? 'ndjson' : 'text';
34
+ continue;
35
+ }
36
+ if (arg === '--op-id' && argv[i + 1]) {
37
+ opId = argv[++i];
38
+ continue;
39
+ }
40
+ if (arg.startsWith('--op-id=')) {
41
+ opId = arg.slice('--op-id='.length);
42
+ continue;
43
+ }
44
+ if (arg === '--ndjson-path' && argv[i + 1]) {
45
+ ndjsonPath = argv[++i];
46
+ continue;
47
+ }
48
+ if (arg.startsWith('--ndjson-path=')) {
49
+ ndjsonPath = arg.slice('--ndjson-path='.length);
50
+ continue;
51
+ }
52
+ rest.push(arg);
53
+ }
54
+ return { rest, output, opId, ndjsonPath };
55
+ }
56
+ const { rest, output, opId, ndjsonPath } = extractGlobalFlags(process.argv.slice(2));
57
+ setOutputMode(output, opId);
58
+ setNdjsonPath(ndjsonPath);
59
+ const [command, ...args] = rest;
10
60
  async function main() {
11
61
  // All commands require root (or auto-sudo)
12
62
  if (command && command !== '--help' && command !== '-h' && command !== '--version' && command !== '-v') {
13
63
  ensureRoot();
14
64
  }
15
65
  switch (command) {
66
+ case 'skill':
67
+ await skillCommand(args);
68
+ break;
16
69
  case 'install':
17
70
  await installCommand(args);
18
71
  break;
72
+ case 'uninstall':
73
+ await uninstallCommand(args);
74
+ break;
19
75
  case 'check':
20
76
  await checkCommand();
21
77
  break;
@@ -34,13 +90,24 @@ async function main() {
34
90
  case 'edit':
35
91
  await editCommand(args);
36
92
  break;
93
+ case 'show':
94
+ await showCommand(args);
95
+ break;
37
96
  case 'feed':
38
97
  await feedCommand(args);
39
98
  break;
99
+ case 'backup':
100
+ await backupCommand(args);
101
+ break;
102
+ case 'restore':
103
+ await restoreCommand(args);
104
+ break;
105
+ case 'bridge':
106
+ await bridgeCommand(args, readCliVersion());
107
+ break;
40
108
  case '--version':
41
109
  case '-v': {
42
- const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
43
- console.log(pkg.version);
110
+ console.log(readCliVersion());
44
111
  break;
45
112
  }
46
113
  case '--help':
@@ -54,34 +121,53 @@ async function main() {
54
121
  process.exit(1);
55
122
  }
56
123
  }
124
+ function readCliVersion() {
125
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
126
+ return typeof pkg.version === 'string' ? pkg.version : 'unknown';
127
+ }
57
128
  function printHelp() {
58
129
  console.log(`
59
130
  okclaw - OKClaw Deployment CLI
60
131
 
61
- Usage: okclaw <command> [args...]
132
+ Usage: okclaw [global-flags] <command> [args...]
62
133
 
134
+ Global flags (before the command):
135
+ --output text|ndjson Output mode (default: text)
136
+ --op-id <uuid> Operation id, echoed in every ndjson event's fields.opId
137
+ --ndjson-path <path> Append ndjson to file instead of stdout (used in detached mode)
138
+
139
+ okclaw skill install <name> --version <ver> [--package-url <url>] Install a skill
140
+ okclaw skill uninstall <name> Uninstall a skill
63
141
  okclaw install <component> --version <ver> [--config '<json>'] [--config-file <path>] [--package-url <url>]
142
+ okclaw uninstall <component> Uninstall a component (currently: openclaw)
64
143
  okclaw check Check & install system dependencies
65
144
  okclaw start Start openclaw gateway
66
145
  okclaw stop Stop openclaw gateway
67
146
  okclaw restart Restart openclaw gateway
68
147
  okclaw status Show gateway status
69
- okclaw edit <target> --file <path> Write config file (user/identity/soul/agents)
148
+ okclaw edit <target> --file <path> Write config file (user/identity/soul/agents/memory/tools/openclaw-json)
149
+ okclaw show <target...> Read config file content to stdout (batch requires --output=ndjson)
70
150
  okclaw feed --file <path> Feed file into knowledge base
151
+ okclaw backup openclaw-user-data --archive [--archive-path <path>] [--scope user-data|clone] [--include-workspace-extra]
152
+ okclaw restore openclaw-user-data --archive <path> [--scope user-data|clone] [--include-workspace-extra]
153
+ okclaw install bridge --config-file <path> Install and start bridge daemon
154
+ okclaw bridge daemon|status|restart|uninstall Manage bridge daemon
71
155
 
72
156
  Components:
73
157
  openclaw Core AI Agent framework (npm install)
74
- openviking Long-term memory plugin (pip + openclaw plugin, needs --package-url)
75
- dingtalk DingTalk channel (npm: @largezhou/ddingtalk)
76
- feishu Feishu/Lark channel (npm: @openclaw/feishu)
77
- wechat WeChat channel (npm: @tencent-weixin/openclaw-weixin)
158
+ bridge OKClaw bridge daemon bundled in this CLI
159
+ dingtalk DingTalk channel (npm: @soimy/dingtalk)
160
+ feishu Feishu/Lark channel (bundled with OpenClaw, config only)
161
+ wechat WeChat channel alias for openclaw-weixin (npm: @tencent-weixin/openclaw-weixin)
78
162
  s3 S3 IM channel (needs --package-url)
79
163
 
80
164
  Examples:
81
165
  okclaw install openclaw --version 2026.3.24 --config-file /root/okclaw/config/openclaw.json
82
- okclaw install openviking --version 0.2.15 --package-url /tmp/ov-plugin.tar.gz --config-file /root/okclaw/config/openviking.json
83
166
  okclaw install dingtalk --version 2.0.1 --config '{"clientId":"xxx","clientSecret":"xxx"}'
84
167
  okclaw install s3 --version 1.0.0 --package-url /tmp/channel-s3.tar.gz
168
+ okclaw uninstall openclaw
169
+ okclaw skill install my-skill --version 1.0.0 --package-url https://example.com/skill.zip
170
+ okclaw skill uninstall my-skill
85
171
  okclaw restart
86
172
  okclaw status
87
173
 
@@ -89,11 +175,29 @@ Notes:
89
175
  - All commands auto-elevate to root via sudo if needed
90
176
  - All paths are anchored to /root/ (forced HOME=/root)
91
177
  - npm uses npmmirror, pip uses tsinghua mirror (China acceleration)
92
- - Node.js >= 22.16 and Python >= 3.11 are auto-installed if missing
178
+ - Node.js >= 24 (LTS) is auto-installed/upgraded via nvm if missing or too old
179
+ - openclaw-user-data defaults to core workspace files and skills only
180
+ - --scope clone backs up/restores only IDENTITY.md, SOUL.md, TOOLS.md, AGENTS.md, and workspace/skills
181
+ - --include-workspace-extra also migrates other OpenClaw workspace root entries, but never /root/.openclaw/openclaw.json
93
182
  `);
94
183
  }
95
184
  main().catch((err) => {
96
- error(String(err.message || err));
185
+ const msg = String(err?.message || err);
186
+ // bug#4 修:顶层 catch 兜底发 end,防止 os-api 永远等不到终态。
187
+ // 有活 emitter 就用它;没有(比如 extractGlobalFlags/ensureRoot 阶段崩)→ 直接写一行 fallback。
188
+ if (isNdjson()) {
189
+ const active = getActiveEmitter();
190
+ if (active && !active.hasEnded()) {
191
+ active.end(false, 1, 'E_TOPLEVEL', { error: msg });
192
+ }
193
+ else if (!active) {
194
+ // 没有任何 emitter 被注册过:手写一条 end 行
195
+ const fallback = new NdjsonEmitter('unknown');
196
+ fallback.start('top-level error');
197
+ fallback.end(false, 1, 'E_TOPLEVEL', { error: msg });
198
+ }
199
+ }
200
+ error(msg);
97
201
  process.exit(1);
98
202
  });
99
203
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,2CAA2C;IAC3C,IAAI,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACvG,UAAU,EAAE,CAAC;IACf,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,OAAO;YACV,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,cAAc,EAAE,CAAC;YACvB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM;QACR;YACE,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ import type { PackageSource, SafePackageVersion } from '../utils/install-safety.js';
1
2
  export interface Installer {
2
3
  checkDeps(): Promise<void>;
3
- install(version: string, packageUrl?: string): Promise<void>;
4
+ install(version: SafePackageVersion, packageSource?: PackageSource): Promise<void>;
4
5
  configure(config: Record<string, unknown>): Promise<void>;
6
+ uninstall?(): Promise<void>;
5
7
  }
@@ -1,9 +1,10 @@
1
1
  import type { Installer } from './base.js';
2
+ import type { PackageSource } from '../utils/install-safety.js';
2
3
  export declare class ChannelInstaller implements Installer {
3
- private channelName;
4
+ private readonly channelName;
4
5
  constructor(channelName: string);
5
6
  checkDeps(): Promise<void>;
6
- install(version: string, packageUrl?: string): Promise<void>;
7
+ install(version: string, packageSource?: PackageSource): Promise<void>;
7
8
  private verifyInstalled;
8
9
  configure(config: Record<string, unknown>): Promise<void>;
9
10
  /**
@@ -15,6 +16,7 @@ export declare class ChannelInstaller implements Installer {
15
16
  */
16
17
  private cleanupStaleState;
17
18
  private hasJsonRef;
19
+ private reportLegacyWechatAliasState;
18
20
  private installFromLocalPackage;
19
21
  /**
20
22
  * Download tgz from npm (npmmirror) first, then install locally.
@@ -22,5 +24,11 @@ export declare class ChannelInstaller implements Installer {
22
24
  */
23
25
  private installViaNpmPack;
24
26
  private addToPluginsAllow;
27
+ /**
28
+ * Push the absolute extension dir into plugins.load.paths so the gateway
29
+ * scans it on startup. Idempotent — dedup against trailing-slash variants
30
+ * (e.g. `/.../dingtalk` vs `/.../dingtalk/` both count as the same entry).
31
+ */
32
+ private addToLoadPaths;
25
33
  private applyConfig;
26
34
  }