@okclaw-build/cli 1.0.0-beta.53 → 1.0.0-beta.55

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 (48) 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 +1121 -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 +89 -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/bridge.d.ts +7 -0
  29. package/dist/commands/bridge.js +100 -0
  30. package/dist/commands/bridge.js.map +1 -0
  31. package/dist/commands/edit.js +2 -2
  32. package/dist/commands/edit.js.map +1 -1
  33. package/dist/commands/install.js +20 -0
  34. package/dist/commands/install.js.map +1 -1
  35. package/dist/commands/openclaw-channel-login.d.ts +54 -0
  36. package/dist/commands/openclaw-channel-login.js +334 -0
  37. package/dist/commands/openclaw-channel-login.js.map +1 -0
  38. package/dist/index.js +18 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/installers/channel.d.ts +1 -0
  41. package/dist/installers/channel.js +40 -0
  42. package/dist/installers/channel.js.map +1 -1
  43. package/dist/utils/constants.d.ts +6 -0
  44. package/dist/utils/constants.js +9 -1
  45. package/dist/utils/constants.js.map +1 -1
  46. package/dist/utils/install-safety.js +4 -2
  47. package/dist/utils/install-safety.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,100 @@
1
+ import { error, info, success } from '../utils/logger.js';
2
+ import { probeBridgeServiceActive, restartBridgeService, uninstallBridgeService, } from '../bridge/service.js';
3
+ import { runBridgeDaemon } from '../bridge/daemon/daemon.js';
4
+ import { OKCLAW_BRIDGE_CONFIG } from '../utils/constants.js';
5
+ export function parseBridgeInstallArgs(args) {
6
+ let configFile;
7
+ let configPath = OKCLAW_BRIDGE_CONFIG;
8
+ let useExistingConfig = false;
9
+ for (let i = 1; i < args.length; i++) {
10
+ const arg = args[i];
11
+ if (arg === '--config-file' || arg.startsWith('--config-file=')) {
12
+ configFile = arg.includes('=') ? arg.slice('--config-file='.length) : args[++i];
13
+ continue;
14
+ }
15
+ if (arg === '--config-path' || arg.startsWith('--config-path=')) {
16
+ configPath = arg.includes('=') ? arg.slice('--config-path='.length) : args[++i];
17
+ continue;
18
+ }
19
+ if (arg === '--use-existing-config') {
20
+ useExistingConfig = true;
21
+ continue;
22
+ }
23
+ throw new Error('E_BRIDGE_USAGE');
24
+ }
25
+ if (useExistingConfig && configFile) {
26
+ throw new Error('E_BRIDGE_USAGE');
27
+ }
28
+ if (!useExistingConfig && !configFile) {
29
+ throw new Error('E_BRIDGE_USAGE');
30
+ }
31
+ return {
32
+ configFile,
33
+ configPath,
34
+ useExistingConfig,
35
+ };
36
+ }
37
+ export async function bridgeCommand(args, installedVersion = 'unknown') {
38
+ const subcommand = args[0];
39
+ try {
40
+ switch (subcommand) {
41
+ case 'daemon': {
42
+ const client = runBridgeDaemon({ configPath: parseBridgeDaemonArgs(args.slice(1)), installedVersion });
43
+ const shutdown = () => {
44
+ client.close();
45
+ // 给 WebSocket close 帧 / TCP FIN best-effort 刷出的时间,让 relay 侧及时清连接而非等 reaper 超时
46
+ setTimeout(() => process.exit(0), 200);
47
+ };
48
+ process.on('SIGTERM', shutdown);
49
+ process.on('SIGINT', shutdown);
50
+ break;
51
+ }
52
+ case 'restart':
53
+ await restartBridgeService();
54
+ success('Bridge service restarted.');
55
+ break;
56
+ case 'status': {
57
+ const active = await probeBridgeServiceActive();
58
+ info(active ? 'Bridge service active.' : 'Bridge service not running.');
59
+ if (!active)
60
+ process.exit(1);
61
+ break;
62
+ }
63
+ case 'uninstall':
64
+ await uninstallBridgeService();
65
+ success('Bridge service uninstalled.');
66
+ break;
67
+ default:
68
+ printBridgeUsage();
69
+ process.exit(1);
70
+ }
71
+ }
72
+ catch (e) {
73
+ const msg = e instanceof Error ? e.message : String(e);
74
+ error(msg);
75
+ process.exit(1);
76
+ }
77
+ }
78
+ function parseBridgeDaemonArgs(args) {
79
+ for (let i = 0; i < args.length; i++) {
80
+ const arg = args[i];
81
+ if (arg === '--config' || arg.startsWith('--config=')) {
82
+ return arg.includes('=') ? arg.slice('--config='.length) : args[++i];
83
+ }
84
+ }
85
+ throw new Error('E_BRIDGE_CONFIG_MISSING');
86
+ }
87
+ function printBridgeUsage() {
88
+ console.log(`
89
+ Usage:
90
+ okclaw bridge daemon --config /etc/okclaw-bridge/config.json
91
+ okclaw bridge status
92
+ okclaw bridge restart
93
+ okclaw bridge uninstall
94
+
95
+ Install:
96
+ okclaw install bridge --config-file /tmp/okclaw/okclaw-bridge-config.json [--config-path /etc/okclaw-bridge/config.json]
97
+ okclaw install bridge --use-existing-config [--config-path /etc/okclaw-bridge/config.json]
98
+ `);
99
+ }
100
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/commands/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAO7D,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,IAAI,UAA8B,CAAC;IACnC,IAAI,UAAU,GAAG,oBAAoB,CAAC;IACtC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,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;QACpB,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChE,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChE,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;YACpC,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,iBAAiB,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,UAAU;QACV,UAAU;QACV,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,gBAAgB,GAAG,SAAS;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,UAAU,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACvG,MAAM,QAAQ,GAAG,GAAS,EAAE;oBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,8EAA8E;oBAC9E,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzC,CAAC,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/B,MAAM;YACR,CAAC;YACD,KAAK,SAAS;gBACZ,MAAM,oBAAoB,EAAE,CAAC;gBAC7B,OAAO,CAAC,2BAA2B,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;YACD,KAAK,WAAW;gBACd,MAAM,sBAAsB,EAAE,CAAC;gBAC/B,OAAO,CAAC,6BAA6B,CAAC,CAAC;gBACvC,MAAM;YACR;gBACE,gBAAgB,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,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,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAc;IAC3C,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;QACpB,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUb,CAAC,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { existsSync, mkdirSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
- import { shell } from '../utils/shell.js';
3
+ import { runCommand } from '../utils/shell.js';
4
4
  import { info, error } from '../utils/logger.js';
5
5
  import { OPENCLAW_HOME, OPENCLAW_WORKSPACE } from '../utils/constants.js';
6
6
  import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
@@ -42,7 +42,7 @@ export async function editCommand(args) {
42
42
  try {
43
43
  emitter.stepStart('write', `copying to ${dest}`);
44
44
  mkdirSync(dirname(dest), { recursive: true });
45
- await shell(`cp -f '${filePath}' '${dest}'`);
45
+ await runCommand('cp', ['-f', filePath, dest]);
46
46
  emitter.stepDone('write', 'written');
47
47
  info(`Written to ${dest}`);
48
48
  emitter.end(true, 0, undefined, { target, dest });
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { OpenclawInstaller } from '../installers/openclaw.js';
3
3
  import { ChannelInstaller } from '../installers/channel.js';
4
4
  import { SkillInstaller } from '../installers/skill.js';
5
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';
8
10
  import { NdjsonEmitter, registerExitHandlers } from '../output/ndjson.js';
@@ -23,6 +25,24 @@ export async function installCommand(args) {
23
25
  emitter.end(false, 1, 'E_USAGE');
24
26
  process.exit(1);
25
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
+ }
26
46
  let version = '';
27
47
  let config;
28
48
  let packageUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.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 {};
@@ -0,0 +1,334 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, symlinkSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { isNdjson } from '../output/mode.js';
6
+ import { NdjsonEmitter, clearActiveEmitter, registerExitHandlers } from '../output/ndjson.js';
7
+ import { OPENCLAW_HOME } from '../utils/constants.js';
8
+ import { runCommandCapture } from '../utils/shell.js';
9
+ export const OPENCLAW_WEIXIN_CHANNEL_ID = 'openclaw-weixin';
10
+ export const WECHAT_PLUGIN_MISSING = 'WECHAT_PLUGIN_MISSING';
11
+ export const WECHAT_QR_START_FAILED = 'WECHAT_QR_START_FAILED';
12
+ export const WECHAT_QR_EXPIRED = 'WECHAT_QR_EXPIRED';
13
+ export const WECHAT_LOGIN_FAILED = 'WECHAT_LOGIN_FAILED';
14
+ export const WECHAT_CHANNEL_START_FAILED = 'WECHAT_CHANNEL_START_FAILED';
15
+ const ACCOUNT_ID_PATTERN = /^[A-Za-z0-9._-]{1,64}$/;
16
+ const DEFAULT_ACCOUNT_ID = 'default';
17
+ const DEFAULT_TIMEOUT_SECONDS = 300;
18
+ const MAX_TIMEOUT_SECONDS = 600;
19
+ const WAIT_SLICE_MS = 35_000;
20
+ export async function openclawChannelLoginCommand(args) {
21
+ const emitter = new NdjsonEmitter('openclaw-channel-login');
22
+ registerExitHandlers(emitter);
23
+ try {
24
+ const options = parseOpenclawChannelLoginArgs(args);
25
+ await runOpenclawChannelLogin(options, { emitter });
26
+ }
27
+ finally {
28
+ clearActiveEmitter();
29
+ }
30
+ }
31
+ export function parseOpenclawChannelLoginArgs(args) {
32
+ let channelId = '';
33
+ let accountId = DEFAULT_ACCOUNT_ID;
34
+ let force = false;
35
+ let timeoutSeconds = DEFAULT_TIMEOUT_SECONDS;
36
+ for (let i = 0; i < args.length; i++) {
37
+ const arg = args[i];
38
+ const readValue = (name) => {
39
+ if (arg.startsWith(`${name}=`)) {
40
+ return arg.slice(name.length + 1);
41
+ }
42
+ const value = args[++i];
43
+ if (!value) {
44
+ throw new Error(`${name} requires a value`);
45
+ }
46
+ return value;
47
+ };
48
+ if (arg === '--channel' || arg.startsWith('--channel=')) {
49
+ channelId = readValue('--channel').trim();
50
+ }
51
+ else if (arg === '--account' || arg.startsWith('--account=')) {
52
+ accountId = readValue('--account').trim();
53
+ }
54
+ else if (arg === '--timeout-seconds' || arg.startsWith('--timeout-seconds=')) {
55
+ timeoutSeconds = normalizeTimeoutSeconds(readValue('--timeout-seconds'));
56
+ }
57
+ else if (arg === '--force') {
58
+ force = true;
59
+ }
60
+ else {
61
+ throw new Error(`Unknown openclaw-channel-login argument: ${arg}`);
62
+ }
63
+ }
64
+ if (!channelId) {
65
+ throw new Error('--channel is required');
66
+ }
67
+ if (channelId !== OPENCLAW_WEIXIN_CHANNEL_ID) {
68
+ throw new Error(`only ${OPENCLAW_WEIXIN_CHANNEL_ID} is supported`);
69
+ }
70
+ if (!ACCOUNT_ID_PATTERN.test(accountId)) {
71
+ throw new Error('invalid account id');
72
+ }
73
+ return { channelId, accountId, force, timeoutSeconds };
74
+ }
75
+ export async function runOpenclawChannelLogin(options, deps) {
76
+ const emitter = deps.emitter;
77
+ emitter.start('start openclaw channel login', {
78
+ channelId: options.channelId,
79
+ accountId: options.accountId,
80
+ force: options.force,
81
+ });
82
+ try {
83
+ const plugin = await (deps.loadPlugin ?? loadInstalledWeixinPlugin)(options.channelId);
84
+ const gateway = plugin.gateway;
85
+ if (!gateway?.loginWithQrStart || !gateway.loginWithQrWait) {
86
+ throw new LoginFailure(WECHAT_PLUGIN_MISSING, 'openclaw-weixin QR login adapter is unavailable');
87
+ }
88
+ const start = await capturePluginStdout(() => gateway.loginWithQrStart({
89
+ accountId: options.accountId,
90
+ force: options.force,
91
+ timeoutMs: 30_000,
92
+ }));
93
+ if (start.connected) {
94
+ const accountId = resolveAccountId(plugin, options.accountId);
95
+ await (deps.startChannel ?? startOpenclawChannel)(options.channelId, accountId);
96
+ emitter.end(true, 0, undefined, successFields(options.channelId, accountId, true));
97
+ return;
98
+ }
99
+ const qrDataUrl = typeof start.qrDataUrl === 'string' ? start.qrDataUrl.trim() : '';
100
+ const sessionKey = typeof start.sessionKey === 'string' ? start.sessionKey.trim() : '';
101
+ if (!qrDataUrl || !sessionKey) {
102
+ throw new LoginFailure(WECHAT_QR_START_FAILED, start.message || 'wechat qr login did not return qrDataUrl');
103
+ }
104
+ emitter.progress('qr_ready', 0.05, 'wechat qr ready', {
105
+ channelId: options.channelId,
106
+ accountId: options.accountId,
107
+ qrDataUrl,
108
+ expireInSeconds: options.timeoutSeconds,
109
+ message: start.message || 'scan qr',
110
+ });
111
+ const deadline = Date.now() + options.timeoutSeconds * 1000;
112
+ while (Date.now() < deadline) {
113
+ const timeoutMs = Math.min(WAIT_SLICE_MS, Math.max(1000, deadline - Date.now()));
114
+ const wait = await capturePluginStdout(() => gateway.loginWithQrWait({
115
+ accountId: options.accountId,
116
+ timeoutMs,
117
+ currentQrDataUrl: qrDataUrl,
118
+ sessionKey,
119
+ }));
120
+ if (wait.connected) {
121
+ const accountId = resolveAccountId(plugin, wait.accountId || options.accountId);
122
+ await (deps.startChannel ?? startOpenclawChannel)(options.channelId, accountId);
123
+ emitter.end(true, 0, undefined, successFields(options.channelId, accountId, false));
124
+ return;
125
+ }
126
+ if (wait.alreadyConnected || isAlreadyConnectedMessage(wait.message)) {
127
+ const accountId = resolveAccountId(plugin, wait.accountId || options.accountId);
128
+ await (deps.startChannel ?? startOpenclawChannel)(options.channelId, accountId);
129
+ emitter.end(true, 0, undefined, successFields(options.channelId, accountId, true));
130
+ return;
131
+ }
132
+ }
133
+ throw new LoginFailure(WECHAT_QR_EXPIRED, 'wechat qr login expired');
134
+ }
135
+ catch (err) {
136
+ const failure = normalizeFailure(err);
137
+ emitter.end(false, 1, failure.code, {
138
+ channelId: options.channelId,
139
+ accountId: options.accountId,
140
+ errorMessage: failure.message,
141
+ });
142
+ if (!isNdjson()) {
143
+ throw err;
144
+ }
145
+ }
146
+ }
147
+ async function loadInstalledWeixinPlugin(channelId) {
148
+ const pluginDir = join(OPENCLAW_HOME, 'extensions', channelId);
149
+ const entry = join(pluginDir, 'dist', 'index.js');
150
+ if (!existsSync(entry)) {
151
+ throw new LoginFailure(WECHAT_PLUGIN_MISSING, `${entry} not found`);
152
+ }
153
+ ensureOpenclawPeerVisible(pluginDir);
154
+ const module = await import(pathToFileURL(entry).href);
155
+ const pluginEntry = module.default;
156
+ if (!pluginEntry || typeof pluginEntry.register !== 'function') {
157
+ throw new LoginFailure(WECHAT_PLUGIN_MISSING, 'openclaw-weixin plugin entry is invalid');
158
+ }
159
+ let captured;
160
+ pluginEntry.register({
161
+ runtime: { version: 'unknown' },
162
+ registerChannel(input) {
163
+ captured = input.plugin;
164
+ },
165
+ });
166
+ if (!captured || captured.id !== channelId) {
167
+ throw new LoginFailure(WECHAT_PLUGIN_MISSING, 'openclaw-weixin channel plugin was not registered');
168
+ }
169
+ return captured;
170
+ }
171
+ function ensureOpenclawPeerVisible(pluginDir) {
172
+ const nodeModulesDir = join(pluginDir, 'node_modules');
173
+ const linkPath = join(nodeModulesDir, 'openclaw');
174
+ if (existsSync(linkPath)) {
175
+ return;
176
+ }
177
+ const openclawRoot = resolveOpenclawPackageRoot();
178
+ mkdirSync(nodeModulesDir, { recursive: true });
179
+ try {
180
+ symlinkSync(openclawRoot, linkPath, 'dir');
181
+ }
182
+ catch (err) {
183
+ if (!existsSync(linkPath) || !lstatSync(linkPath).isSymbolicLink()) {
184
+ throw err;
185
+ }
186
+ }
187
+ }
188
+ function resolveOpenclawPackageRoot() {
189
+ const candidates = [
190
+ resolveOpenclawRootFromNpm(),
191
+ resolveOpenclawRootFromBinary(),
192
+ ].filter((value) => Boolean(value));
193
+ const found = candidates.find((candidate) => existsSync(candidate));
194
+ if (found) {
195
+ return found;
196
+ }
197
+ throw new LoginFailure(WECHAT_PLUGIN_MISSING, 'openclaw package root is not resolvable in current node environment');
198
+ }
199
+ function resolveOpenclawRootFromNpm() {
200
+ try {
201
+ const globalRoot = execFileSync('npm', ['root', '-g'], { encoding: 'utf8' }).trim();
202
+ return globalRoot ? join(globalRoot, 'openclaw') : undefined;
203
+ }
204
+ catch {
205
+ return undefined;
206
+ }
207
+ }
208
+ function resolveOpenclawRootFromBinary() {
209
+ try {
210
+ const bin = execFileSync('sh', ['-lc', 'command -v openclaw'], { encoding: 'utf8' }).trim();
211
+ if (!bin)
212
+ return undefined;
213
+ return findPackageRoot(dirname(realpathSync(bin)));
214
+ }
215
+ catch {
216
+ return undefined;
217
+ }
218
+ }
219
+ function findPackageRoot(startDir) {
220
+ let current = startDir;
221
+ for (let i = 0; i < 10; i++) {
222
+ const pkg = join(current, 'package.json');
223
+ if (existsSync(pkg)) {
224
+ try {
225
+ const parsed = JSON.parse(readFileSync(pkg, 'utf8'));
226
+ if (parsed.name === 'openclaw') {
227
+ return current;
228
+ }
229
+ }
230
+ catch {
231
+ return undefined;
232
+ }
233
+ }
234
+ const parent = dirname(current);
235
+ if (parent === current)
236
+ return undefined;
237
+ current = parent;
238
+ }
239
+ return undefined;
240
+ }
241
+ async function startOpenclawChannel(channelId, accountId) {
242
+ const result = await runCommandCapture('openclaw', [
243
+ 'gateway',
244
+ 'call',
245
+ 'channels.start',
246
+ '--params',
247
+ JSON.stringify({ channel: channelId, accountId }),
248
+ '--json',
249
+ '--timeout',
250
+ '30000',
251
+ ]);
252
+ if (result.code !== 0) {
253
+ throw new LoginFailure(WECHAT_CHANNEL_START_FAILED, 'openclaw channels.start failed');
254
+ }
255
+ }
256
+ function resolveAccountId(plugin, rawAccountId) {
257
+ if (rawAccountId === DEFAULT_ACCOUNT_ID) {
258
+ try {
259
+ const accountIds = plugin.config?.listAccountIds?.({ channels: {} }) ?? [];
260
+ if (accountIds.length === 1 && accountIds[0]?.trim()) {
261
+ return accountIds[0].trim();
262
+ }
263
+ }
264
+ catch {
265
+ // Continue with resolveAccount fallback.
266
+ }
267
+ }
268
+ try {
269
+ const account = plugin.config?.resolveAccount?.({ channels: {} }, rawAccountId);
270
+ const normalized = account?.accountId;
271
+ if (typeof normalized === 'string' && normalized.trim()) {
272
+ return normalized.trim();
273
+ }
274
+ }
275
+ catch {
276
+ // Fall back to the raw value; the plugin already saved credentials before this point.
277
+ }
278
+ return rawAccountId;
279
+ }
280
+ async function capturePluginStdout(fn) {
281
+ if (!isNdjson()) {
282
+ return fn();
283
+ }
284
+ const stdoutWrite = process.stdout.write;
285
+ const stderrWrite = process.stderr.write;
286
+ process.stdout.write = (() => true);
287
+ process.stderr.write = (() => true);
288
+ try {
289
+ return await fn();
290
+ }
291
+ finally {
292
+ process.stdout.write = stdoutWrite;
293
+ process.stderr.write = stderrWrite;
294
+ }
295
+ }
296
+ function successFields(channelId, accountId, alreadyConnected) {
297
+ return {
298
+ channelId,
299
+ accountId,
300
+ connected: true,
301
+ alreadyConnected,
302
+ };
303
+ }
304
+ function isAlreadyConnectedMessage(message) {
305
+ if (typeof message !== 'string') {
306
+ return false;
307
+ }
308
+ const text = message.toLowerCase();
309
+ return text.includes('already') || message.includes('无需重复连接') || message.includes('已连接过');
310
+ }
311
+ function normalizeTimeoutSeconds(raw) {
312
+ const parsed = Number.parseInt(raw, 10);
313
+ if (!Number.isFinite(parsed) || parsed <= 0) {
314
+ return DEFAULT_TIMEOUT_SECONDS;
315
+ }
316
+ return Math.min(parsed, MAX_TIMEOUT_SECONDS);
317
+ }
318
+ function normalizeFailure(err) {
319
+ if (err instanceof LoginFailure) {
320
+ return { code: err.code, message: err.message };
321
+ }
322
+ return {
323
+ code: WECHAT_LOGIN_FAILED,
324
+ message: err instanceof Error ? err.message : String(err),
325
+ };
326
+ }
327
+ class LoginFailure extends Error {
328
+ code;
329
+ constructor(code, message) {
330
+ super(message);
331
+ this.code = code;
332
+ }
333
+ }
334
+ //# sourceMappingURL=openclaw-channel-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-channel-login.js","sourceRoot":"","sources":["../../src/commands/openclaw-channel-login.ts"],"names":[],"mappings":"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"}