@okclaw-build/cli 1.0.0-beta.6 → 1.0.0-beta.60

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 (121) hide show
  1. package/dist/bridge/daemon/config.d.ts +24 -0
  2. package/dist/bridge/daemon/config.js +96 -0
  3. package/dist/bridge/daemon/config.js.map +1 -0
  4. package/dist/bridge/daemon/daemon.d.ts +7 -0
  5. package/dist/bridge/daemon/daemon.js +23 -0
  6. package/dist/bridge/daemon/daemon.js.map +1 -0
  7. package/dist/bridge/daemon/event-id.d.ts +2 -0
  8. package/dist/bridge/daemon/event-id.js +18 -0
  9. package/dist/bridge/daemon/event-id.js.map +1 -0
  10. package/dist/bridge/daemon/frames.d.ts +81 -0
  11. package/dist/bridge/daemon/frames.js +64 -0
  12. package/dist/bridge/daemon/frames.js.map +1 -0
  13. package/dist/bridge/daemon/openclaw-chat-runtime.d.ts +80 -0
  14. package/dist/bridge/daemon/openclaw-chat-runtime.js +1222 -0
  15. package/dist/bridge/daemon/openclaw-chat-runtime.js.map +1 -0
  16. package/dist/bridge/daemon/openclaw-gateway-client.d.ts +58 -0
  17. package/dist/bridge/daemon/openclaw-gateway-client.js +251 -0
  18. package/dist/bridge/daemon/openclaw-gateway-client.js.map +1 -0
  19. package/dist/bridge/daemon/relay-client.d.ts +75 -0
  20. package/dist/bridge/daemon/relay-client.js +369 -0
  21. package/dist/bridge/daemon/relay-client.js.map +1 -0
  22. package/dist/bridge/daemon/stub-chat-runtime.d.ts +4 -0
  23. package/dist/bridge/daemon/stub-chat-runtime.js +91 -0
  24. package/dist/bridge/daemon/stub-chat-runtime.js.map +1 -0
  25. package/dist/bridge/service.d.ts +12 -0
  26. package/dist/bridge/service.js +86 -0
  27. package/dist/bridge/service.js.map +1 -0
  28. package/dist/commands/backup.d.ts +16 -0
  29. package/dist/commands/backup.js +99 -0
  30. package/dist/commands/backup.js.map +1 -0
  31. package/dist/commands/bridge.d.ts +7 -0
  32. package/dist/commands/bridge.js +100 -0
  33. package/dist/commands/bridge.js.map +1 -0
  34. package/dist/commands/check.js +22 -6
  35. package/dist/commands/check.js.map +1 -1
  36. package/dist/commands/edit.d.ts +2 -7
  37. package/dist/commands/edit.js +28 -16
  38. package/dist/commands/edit.js.map +1 -1
  39. package/dist/commands/feed.js +48 -16
  40. package/dist/commands/feed.js.map +1 -1
  41. package/dist/commands/install.js +99 -18
  42. package/dist/commands/install.js.map +1 -1
  43. package/dist/commands/migration.d.ts +1 -0
  44. package/dist/commands/migration.js +205 -0
  45. package/dist/commands/migration.js.map +1 -0
  46. package/dist/commands/openclaw-channel-login.d.ts +54 -0
  47. package/dist/commands/openclaw-channel-login.js +334 -0
  48. package/dist/commands/openclaw-channel-login.js.map +1 -0
  49. package/dist/commands/restore.d.ts +16 -0
  50. package/dist/commands/restore.js +94 -0
  51. package/dist/commands/restore.js.map +1 -0
  52. package/dist/commands/service.js +56 -13
  53. package/dist/commands/service.js.map +1 -1
  54. package/dist/commands/show.d.ts +13 -0
  55. package/dist/commands/show.js +70 -0
  56. package/dist/commands/show.js.map +1 -0
  57. package/dist/commands/skill.d.ts +1 -0
  58. package/dist/commands/skill.js +137 -0
  59. package/dist/commands/skill.js.map +1 -0
  60. package/dist/commands/uninstall.d.ts +1 -0
  61. package/dist/commands/uninstall.js +46 -0
  62. package/dist/commands/uninstall.js.map +1 -0
  63. package/dist/index.js +121 -12
  64. package/dist/index.js.map +1 -1
  65. package/dist/installers/base.d.ts +3 -1
  66. package/dist/installers/channel.d.ts +10 -2
  67. package/dist/installers/channel.js +143 -24
  68. package/dist/installers/channel.js.map +1 -1
  69. package/dist/installers/openclaw.d.ts +19 -2
  70. package/dist/installers/openclaw.js +186 -55
  71. package/dist/installers/openclaw.js.map +1 -1
  72. package/dist/installers/openviking-purge.d.ts +52 -0
  73. package/dist/installers/openviking-purge.js +380 -0
  74. package/dist/installers/openviking-purge.js.map +1 -0
  75. package/dist/installers/openviking.js +1 -2
  76. package/dist/installers/openviking.js.map +1 -1
  77. package/dist/installers/skill.d.ts +5 -2
  78. package/dist/installers/skill.js +67 -18
  79. package/dist/installers/skill.js.map +1 -1
  80. package/dist/migration/archive.d.ts +14 -0
  81. package/dist/migration/archive.js +84 -0
  82. package/dist/migration/archive.js.map +1 -0
  83. package/dist/migration/crypto.d.ts +16 -0
  84. package/dist/migration/crypto.js +56 -0
  85. package/dist/migration/crypto.js.map +1 -0
  86. package/dist/migration/manifest.d.ts +39 -0
  87. package/dist/migration/manifest.js +140 -0
  88. package/dist/migration/manifest.js.map +1 -0
  89. package/dist/openclaw-user-data.d.ts +86 -0
  90. package/dist/openclaw-user-data.js +422 -0
  91. package/dist/openclaw-user-data.js.map +1 -0
  92. package/dist/output/mode.d.ts +11 -0
  93. package/dist/output/mode.js +27 -0
  94. package/dist/output/mode.js.map +1 -0
  95. package/dist/output/ndjson.d.ts +57 -0
  96. package/dist/output/ndjson.js +136 -0
  97. package/dist/output/ndjson.js.map +1 -0
  98. package/dist/utils/constants.d.ts +14 -13
  99. package/dist/utils/constants.js +40 -21
  100. package/dist/utils/constants.js.map +1 -1
  101. package/dist/utils/deps.d.ts +34 -3
  102. package/dist/utils/deps.js +62 -100
  103. package/dist/utils/deps.js.map +1 -1
  104. package/dist/utils/install-safety.d.ts +25 -0
  105. package/dist/utils/install-safety.js +97 -0
  106. package/dist/utils/install-safety.js.map +1 -0
  107. package/dist/utils/logger.d.ts +10 -0
  108. package/dist/utils/logger.js +31 -4
  109. package/dist/utils/logger.js.map +1 -1
  110. package/dist/utils/mirror.js +14 -0
  111. package/dist/utils/mirror.js.map +1 -1
  112. package/dist/utils/openclaw-config-cli.d.ts +19 -0
  113. package/dist/utils/openclaw-config-cli.js +81 -0
  114. package/dist/utils/openclaw-config-cli.js.map +1 -0
  115. package/dist/utils/openclaw-daemon.d.ts +58 -0
  116. package/dist/utils/openclaw-daemon.js +154 -0
  117. package/dist/utils/openclaw-daemon.js.map +1 -0
  118. package/dist/utils/shell.d.ts +23 -2
  119. package/dist/utils/shell.js +138 -5
  120. package/dist/utils/shell.js.map +1 -1
  121. 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,78 @@
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';
13
+ import { openclawChannelLoginCommand } from './commands/openclaw-channel-login.js';
7
14
  import { ensureRoot } from './utils/shell.js';
8
15
  import { error } from './utils/logger.js';
9
- const [command, ...args] = process.argv.slice(2);
16
+ import { setNdjsonPath, setOutputMode, isNdjson } from './output/mode.js';
17
+ import { getActiveEmitter, NdjsonEmitter } from './output/ndjson.js';
18
+ /**
19
+ * 从 argv 里抽出全局 flag --output=<mode> 和 --op-id=<uuid>,返回剩余参数。
20
+ * 支持 "--flag=value" 与 "--flag value" 两种写法。
21
+ */
22
+ function extractGlobalFlags(argv) {
23
+ const rest = [];
24
+ let output = 'text';
25
+ let opId;
26
+ let ndjsonPath;
27
+ for (let i = 0; i < argv.length; i++) {
28
+ const arg = argv[i];
29
+ if (arg === '--output' && argv[i + 1]) {
30
+ output = argv[++i] === 'ndjson' ? 'ndjson' : 'text';
31
+ continue;
32
+ }
33
+ if (arg.startsWith('--output=')) {
34
+ output = arg.slice('--output='.length) === 'ndjson' ? 'ndjson' : 'text';
35
+ continue;
36
+ }
37
+ if (arg === '--op-id' && argv[i + 1]) {
38
+ opId = argv[++i];
39
+ continue;
40
+ }
41
+ if (arg.startsWith('--op-id=')) {
42
+ opId = arg.slice('--op-id='.length);
43
+ continue;
44
+ }
45
+ if (arg === '--ndjson-path' && argv[i + 1]) {
46
+ ndjsonPath = argv[++i];
47
+ continue;
48
+ }
49
+ if (arg.startsWith('--ndjson-path=')) {
50
+ ndjsonPath = arg.slice('--ndjson-path='.length);
51
+ continue;
52
+ }
53
+ rest.push(arg);
54
+ }
55
+ return { rest, output, opId, ndjsonPath };
56
+ }
57
+ const { rest, output, opId, ndjsonPath } = extractGlobalFlags(process.argv.slice(2));
58
+ setOutputMode(output, opId);
59
+ setNdjsonPath(ndjsonPath);
60
+ const [command, ...args] = rest;
10
61
  async function main() {
11
62
  // All commands require root (or auto-sudo)
12
63
  if (command && command !== '--help' && command !== '-h' && command !== '--version' && command !== '-v') {
13
64
  ensureRoot();
14
65
  }
15
66
  switch (command) {
67
+ case 'skill':
68
+ await skillCommand(args);
69
+ break;
16
70
  case 'install':
17
71
  await installCommand(args);
18
72
  break;
73
+ case 'uninstall':
74
+ await uninstallCommand(args);
75
+ break;
19
76
  case 'check':
20
77
  await checkCommand();
21
78
  break;
@@ -34,13 +91,27 @@ async function main() {
34
91
  case 'edit':
35
92
  await editCommand(args);
36
93
  break;
94
+ case 'show':
95
+ await showCommand(args);
96
+ break;
37
97
  case 'feed':
38
98
  await feedCommand(args);
39
99
  break;
100
+ case 'backup':
101
+ await backupCommand(args);
102
+ break;
103
+ case 'restore':
104
+ await restoreCommand(args);
105
+ break;
106
+ case 'bridge':
107
+ await bridgeCommand(args, readCliVersion());
108
+ break;
109
+ case 'openclaw-channel-login':
110
+ await openclawChannelLoginCommand(args);
111
+ break;
40
112
  case '--version':
41
113
  case '-v': {
42
- const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
43
- console.log(pkg.version);
114
+ console.log(readCliVersion());
44
115
  break;
45
116
  }
46
117
  case '--help':
@@ -54,34 +125,54 @@ async function main() {
54
125
  process.exit(1);
55
126
  }
56
127
  }
128
+ function readCliVersion() {
129
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
130
+ return typeof pkg.version === 'string' ? pkg.version : 'unknown';
131
+ }
57
132
  function printHelp() {
58
133
  console.log(`
59
134
  okclaw - OKClaw Deployment CLI
60
135
 
61
- Usage: okclaw <command> [args...]
136
+ Usage: okclaw [global-flags] <command> [args...]
137
+
138
+ Global flags (before the command):
139
+ --output text|ndjson Output mode (default: text)
140
+ --op-id <uuid> Operation id, echoed in every ndjson event's fields.opId
141
+ --ndjson-path <path> Append ndjson to file instead of stdout (used in detached mode)
62
142
 
143
+ okclaw skill install <name> --version <ver> [--package-url <url>] Install a skill
144
+ okclaw skill uninstall <name> Uninstall a skill
63
145
  okclaw install <component> --version <ver> [--config '<json>'] [--config-file <path>] [--package-url <url>]
146
+ okclaw uninstall <component> Uninstall a component (currently: openclaw)
64
147
  okclaw check Check & install system dependencies
65
148
  okclaw start Start openclaw gateway
66
149
  okclaw stop Stop openclaw gateway
67
150
  okclaw restart Restart openclaw gateway
68
151
  okclaw status Show gateway status
69
- okclaw edit <target> --file <path> Write config file (user/identity/soul/agents)
152
+ okclaw edit <target> --file <path> Write config file (user/identity/soul/agents/memory/tools/openclaw-json)
153
+ okclaw show <target...> Read config file content to stdout (batch requires --output=ndjson)
70
154
  okclaw feed --file <path> Feed file into knowledge base
155
+ okclaw backup openclaw-user-data --archive [--archive-path <path>] [--scope user-data|clone] [--include-workspace-extra]
156
+ okclaw restore openclaw-user-data --archive <path> [--scope user-data|clone] [--include-workspace-extra]
157
+ okclaw install bridge --config-file <path> Install and start bridge daemon
158
+ okclaw bridge daemon|status|restart|uninstall Manage bridge daemon
159
+ okclaw openclaw-channel-login --channel openclaw-weixin Run OpenClaw plugin QR login (OS internal)
71
160
 
72
161
  Components:
73
162
  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)
163
+ bridge OKClaw bridge daemon bundled in this CLI
164
+ dingtalk DingTalk channel (npm: @soimy/dingtalk)
165
+ feishu Feishu/Lark channel (bundled with OpenClaw, config only)
166
+ wechat WeChat channel alias for openclaw-weixin (npm: @tencent-weixin/openclaw-weixin)
78
167
  s3 S3 IM channel (needs --package-url)
79
168
 
80
169
  Examples:
81
170
  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
171
  okclaw install dingtalk --version 2.0.1 --config '{"clientId":"xxx","clientSecret":"xxx"}'
84
172
  okclaw install s3 --version 1.0.0 --package-url /tmp/channel-s3.tar.gz
173
+ okclaw uninstall openclaw
174
+ okclaw skill install my-skill --version 1.0.0 --package-url https://example.com/skill.zip
175
+ okclaw skill uninstall my-skill
85
176
  okclaw restart
86
177
  okclaw status
87
178
 
@@ -89,11 +180,29 @@ Notes:
89
180
  - All commands auto-elevate to root via sudo if needed
90
181
  - All paths are anchored to /root/ (forced HOME=/root)
91
182
  - npm uses npmmirror, pip uses tsinghua mirror (China acceleration)
92
- - Node.js >= 22.16 and Python >= 3.11 are auto-installed if missing
183
+ - Node.js >= 24 (LTS) is auto-installed/upgraded via nvm if missing or too old
184
+ - openclaw-user-data defaults to core workspace files and skills only
185
+ - --scope clone backs up/restores only IDENTITY.md, SOUL.md, TOOLS.md, AGENTS.md, and workspace/skills
186
+ - --include-workspace-extra also migrates other OpenClaw workspace root entries, but never /root/.openclaw/openclaw.json
93
187
  `);
94
188
  }
95
189
  main().catch((err) => {
96
- error(String(err.message || err));
190
+ const msg = String(err?.message || err);
191
+ // bug#4 修:顶层 catch 兜底发 end,防止 os-api 永远等不到终态。
192
+ // 有活 emitter 就用它;没有(比如 extractGlobalFlags/ensureRoot 阶段崩)→ 直接写一行 fallback。
193
+ if (isNdjson()) {
194
+ const active = getActiveEmitter();
195
+ if (active && !active.hasEnded()) {
196
+ active.end(false, 1, 'E_TOPLEVEL', { error: msg });
197
+ }
198
+ else if (!active) {
199
+ // 没有任何 emitter 被注册过:手写一条 end 行
200
+ const fallback = new NdjsonEmitter('unknown');
201
+ fallback.start('top-level error');
202
+ fallback.end(false, 1, 'E_TOPLEVEL', { error: msg });
203
+ }
204
+ }
205
+ error(msg);
97
206
  process.exit(1);
98
207
  });
99
208
  //# 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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,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,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAmB,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAc;IAMxC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,MAAM,GAAe,MAAM,CAAC;IAChC,IAAI,IAAwB,CAAC;IAC7B,IAAI,UAA8B,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YACxE,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,eAAe,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3C,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5B,aAAa,CAAC,UAAU,CAAC,CAAC;AAE1B,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAEhC,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,OAAO;YACV,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,WAAW;YACd,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,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,MAAM;YACT,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,wBAAwB;YAC3B,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;YAC9B,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,cAAc;IACrB,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;IAC1F,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;IACxC,8CAA8C;IAC9C,2EAA2E;IAC3E,IAAI,QAAQ,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;YAC9C,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -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
  }