claw_messenger 0.0.1
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/README.md +111 -0
- package/bin/auto-init.js +98 -0
- package/bin/dm-bridge.js +12 -0
- package/bin/install.js +217 -0
- package/bin/setup.js +160 -0
- package/bridge-runner.ts +324 -0
- package/dist/bridge-runner.d.ts +2 -0
- package/dist/bridge-runner.d.ts.map +1 -0
- package/dist/bridge-runner.js +268 -0
- package/dist/bridge-runner.js.map +1 -0
- package/dist/src/auto-register.d.ts +2 -0
- package/dist/src/auto-register.d.ts.map +1 -0
- package/dist/src/auto-register.js +82 -0
- package/dist/src/auto-register.js.map +1 -0
- package/dist/src/env-polyfill.d.ts +8 -0
- package/dist/src/env-polyfill.d.ts.map +1 -0
- package/dist/src/env-polyfill.js +101 -0
- package/dist/src/env-polyfill.js.map +1 -0
- package/dist/src/index.d.ts +36 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +75 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/plugin-entry.d.ts +9 -0
- package/dist/src/plugin-entry.d.ts.map +1 -0
- package/dist/src/plugin-entry.js +174 -0
- package/dist/src/plugin-entry.js.map +1 -0
- package/dist/src/rongcloud-client.d.ts +21 -0
- package/dist/src/rongcloud-client.d.ts.map +1 -0
- package/dist/src/rongcloud-client.js +87 -0
- package/dist/src/rongcloud-client.js.map +1 -0
- package/dist/test-bridge.js +81 -0
- package/dist/test-connection.js +65 -0
- package/dist/test-mock.js +72 -0
- package/openclaw.plugin.json +24 -0
- package/package.json +88 -0
package/bridge-runner.ts
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { RongCloudClient } from './src/rongcloud-client';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import * as readline from 'readline';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as crypto from 'crypto';
|
|
7
|
+
import * as os from 'os';
|
|
8
|
+
import { exec } from 'child_process';
|
|
9
|
+
import { promisify } from 'util';
|
|
10
|
+
import * as qrcode from 'qrcode-terminal';
|
|
11
|
+
|
|
12
|
+
const execAsync = promisify(exec);
|
|
13
|
+
|
|
14
|
+
const SERVER_URL = process.env.DM_SERVER_URL || 'https://newsradar.dreamdt.cn/im';
|
|
15
|
+
// const SERVER_URL = process.env.DM_SERVER_URL || 'http://127.0.0.1:5000/im';
|
|
16
|
+
const APP_KEY = process.env.DM_APP_KEY || 'bmdehs6pbyyks';
|
|
17
|
+
|
|
18
|
+
const CONFIG_DIR = path.join(os.homedir(), '.claw-bridge');
|
|
19
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 查找 OpenClaw 配置文件
|
|
23
|
+
*/
|
|
24
|
+
function findOpenClawConfig(): any {
|
|
25
|
+
const possiblePaths = [
|
|
26
|
+
path.join(os.homedir(), '.openclaw', 'openclaw.json'),
|
|
27
|
+
path.join(os.homedir(), 'openclaw.json'),
|
|
28
|
+
path.join(process.env.APPDATA || '', 'openclaw', 'openclaw.json'),
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
for (const configPath of possiblePaths) {
|
|
32
|
+
if (fs.existsSync(configPath)) {
|
|
33
|
+
try {
|
|
34
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
35
|
+
return JSON.parse(content);
|
|
36
|
+
} catch {}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 获取 OpenClaw Gateway Token
|
|
44
|
+
*/
|
|
45
|
+
function getOpenClawToken(): string {
|
|
46
|
+
// 1. 优先从环境变量
|
|
47
|
+
const envToken = process.env.OPENCLAW_GATEWAY_TOKEN || process.env.OPENCLAW_API_KEY;
|
|
48
|
+
if (envToken) return envToken;
|
|
49
|
+
|
|
50
|
+
// 2. 从配置文件
|
|
51
|
+
const config = findOpenClawConfig();
|
|
52
|
+
if (config?.gateway?.auth?.token) {
|
|
53
|
+
return config.gateway.auth.token;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface BridgeConfig {
|
|
60
|
+
nodeId: string;
|
|
61
|
+
nodeName: string;
|
|
62
|
+
token: string;
|
|
63
|
+
createdAt: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const rl = readline.createInterface({
|
|
67
|
+
input: process.stdin,
|
|
68
|
+
output: process.stdout
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const question = (prompt: string): Promise<string> => {
|
|
72
|
+
return new Promise(resolve => rl.question(prompt, resolve));
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
function generateNodeId(): string {
|
|
76
|
+
const random = crypto.randomBytes(3).toString('hex');
|
|
77
|
+
return `claw_${random}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function loadConfig(): Promise<BridgeConfig | null> {
|
|
81
|
+
try {
|
|
82
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
83
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
84
|
+
return JSON.parse(content);
|
|
85
|
+
}
|
|
86
|
+
} catch {}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function saveConfig(config: BridgeConfig): Promise<void> {
|
|
91
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
92
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
95
|
+
console.log(`[Bridge] 配置已保存: ${CONFIG_FILE}`);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async function registerNode(nodeName: string): Promise<{ nodeId: string; token: string } | null> {
|
|
99
|
+
const nodeId = generateNodeId();
|
|
100
|
+
console.log(`\n[Bridge] 正在注册节点: ${nodeId}...`);
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const resp = await axios.post(`${SERVER_URL}/api/claw/register`, {
|
|
104
|
+
node_id: nodeId,
|
|
105
|
+
name: nodeName,
|
|
106
|
+
}, { timeout: 10000 });
|
|
107
|
+
|
|
108
|
+
if (resp.data?.code === 200 || resp.data?.code === 409) {
|
|
109
|
+
const tokenResp = await axios.get(`${SERVER_URL}/api/claw/token/${nodeId}`, { timeout: 10000 });
|
|
110
|
+
|
|
111
|
+
if (tokenResp.data?.code === 200) {
|
|
112
|
+
return {
|
|
113
|
+
nodeId,
|
|
114
|
+
token: tokenResp.data.data.token,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
console.error('[Bridge] 注册失败:', resp.data?.message || '未知错误');
|
|
120
|
+
return null;
|
|
121
|
+
|
|
122
|
+
} catch (err: any) {
|
|
123
|
+
console.error('[Bridge] 注册异常:', err.message);
|
|
124
|
+
console.error('[Bridge] 请确保服务端正在运行: python server/app.py');
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async function callOpenClaw(message: string): Promise<string> {
|
|
130
|
+
if (!message || !message.trim()) {
|
|
131
|
+
return '消息内容为空';
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const sessionId = `im-${Date.now()}`;
|
|
135
|
+
const token = getOpenClawToken();
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
console.log('[Bridge] 调用 OpenClaw CLI...');
|
|
139
|
+
|
|
140
|
+
// 使用 cmd /c 确保 Windows 下正确执行
|
|
141
|
+
const isWindows = process.platform === 'win32';
|
|
142
|
+
const cmd = isWindows
|
|
143
|
+
? `cmd /c openclaw agent -m "${message.replace(/"/g, '\\"')}" --session-id ${sessionId}`
|
|
144
|
+
: `openclaw agent -m "${message.replace(/"/g, '\\"')}" --session-id ${sessionId}`;
|
|
145
|
+
|
|
146
|
+
const env = { ...process.env };
|
|
147
|
+
if (token) {
|
|
148
|
+
env.OPENCLAW_GATEWAY_TOKEN = token;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const { stdout, stderr } = await execAsync(cmd, {
|
|
152
|
+
timeout: 120000,
|
|
153
|
+
maxBuffer: 1024 * 1024,
|
|
154
|
+
env,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
const output = stdout || stderr || '';
|
|
158
|
+
|
|
159
|
+
// 过滤掉 [plugins] 行和 ANSI 颜色代码
|
|
160
|
+
const cleanOutput = output
|
|
161
|
+
.split('\n')
|
|
162
|
+
.filter(line => !line.includes('[plugins]'))
|
|
163
|
+
.map(line => line.replace(/\x1B\[[0-9;]*m/g, '').trim())
|
|
164
|
+
.filter(line => line.length > 0)
|
|
165
|
+
.join('\n');
|
|
166
|
+
|
|
167
|
+
return cleanOutput || 'OpenClaw 未返回有效响应';
|
|
168
|
+
|
|
169
|
+
} catch (err: any) {
|
|
170
|
+
if (err.killed) {
|
|
171
|
+
return 'OpenClaw 响应超时';
|
|
172
|
+
}
|
|
173
|
+
if (err.code === 'ENOENT') {
|
|
174
|
+
return '找不到 openclaw 命令';
|
|
175
|
+
}
|
|
176
|
+
return `OpenClaw 调用失败`;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async function startBridge(config: BridgeConfig) {
|
|
181
|
+
console.log('\n[Bridge] ========== 启动 ==========');
|
|
182
|
+
console.log(` 节点 ID: ${config.nodeId}`);
|
|
183
|
+
console.log(` 节点名称: ${config.nodeName}`);
|
|
184
|
+
|
|
185
|
+
const client = new RongCloudClient({
|
|
186
|
+
appKey: APP_KEY,
|
|
187
|
+
token: config.token,
|
|
188
|
+
onMessage: async (msg: any) => {
|
|
189
|
+
if (msg.isOffLineMessage) return;
|
|
190
|
+
if (msg.messageType !== 'RC:TxtMsg') return;
|
|
191
|
+
if (msg.senderUserId === config.nodeId) return;
|
|
192
|
+
|
|
193
|
+
const content = msg.content?.content || '';
|
|
194
|
+
const fromUser = msg.senderUserId;
|
|
195
|
+
const targetId = msg.targetId;
|
|
196
|
+
const convType = msg.conversationType;
|
|
197
|
+
|
|
198
|
+
console.log(`\n[Bridge] 收到消息:`);
|
|
199
|
+
console.log(` 来自: ${fromUser}`);
|
|
200
|
+
console.log(` 类型: ${convType === 3 ? '群聊' : '私聊'}`);
|
|
201
|
+
console.log(` 内容: ${content.substring(0, 50)}${content.length > 50 ? '...' : ''}`);
|
|
202
|
+
|
|
203
|
+
const reply = await callOpenClaw(content);
|
|
204
|
+
console.log(`[Bridge] 回复: ${reply.substring(0, 50)}...`);
|
|
205
|
+
|
|
206
|
+
try {
|
|
207
|
+
await client.sendMessage(convType === 3 ? targetId : fromUser, reply, convType);
|
|
208
|
+
console.log('[Bridge] 已发送');
|
|
209
|
+
} catch (err: any) {
|
|
210
|
+
console.error('[Bridge] 发送失败:', err.message);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
onConnectSuccess: (userId) => {
|
|
214
|
+
console.log(`\n[Bridge] 连接成功! userId: ${userId}`);
|
|
215
|
+
console.log('[Bridge] 等待消息...\n');
|
|
216
|
+
},
|
|
217
|
+
onError: (code) => {
|
|
218
|
+
console.error(`[Bridge] 连接错误: ${code}`);
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
console.log('\n[Bridge] 连接融云...');
|
|
223
|
+
await client.connect();
|
|
224
|
+
|
|
225
|
+
console.log('\n[Bridge] 监听中... (Ctrl+C 退出)');
|
|
226
|
+
process.stdin.resume();
|
|
227
|
+
|
|
228
|
+
process.on('SIGINT', () => {
|
|
229
|
+
console.log('\n[Bridge] 退出');
|
|
230
|
+
process.exit(0);
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
async function main() {
|
|
235
|
+
console.log('[Bridge] claw_messenger v1.0.0');
|
|
236
|
+
console.log(`[Bridge] 配置文件: ${CONFIG_FILE}\n`);
|
|
237
|
+
|
|
238
|
+
let config = await loadConfig();
|
|
239
|
+
|
|
240
|
+
if (config) {
|
|
241
|
+
console.log('[Bridge] 已加载配置:');
|
|
242
|
+
console.log(` 节点 ID: ${config.nodeId}`);
|
|
243
|
+
console.log(` 节点名称: ${config.nodeName}`);
|
|
244
|
+
|
|
245
|
+
const reset = await question('\n是否重新注册? (y/N): ');
|
|
246
|
+
if (reset.toLowerCase() !== 'y') {
|
|
247
|
+
rl.close();
|
|
248
|
+
await startBridge(config);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
console.log('\n========================================');
|
|
254
|
+
console.log(' claw_messenger - 注册');
|
|
255
|
+
console.log('========================================\n');
|
|
256
|
+
|
|
257
|
+
const nodeName = await question('请输入节点昵称 (如: 我的龙虾): ');
|
|
258
|
+
|
|
259
|
+
if (!nodeName.trim()) {
|
|
260
|
+
console.error('[Bridge] 昵称不能为空');
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const result = await registerNode(nodeName.trim());
|
|
265
|
+
|
|
266
|
+
if (!result) {
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
config = {
|
|
271
|
+
nodeId: result.nodeId,
|
|
272
|
+
nodeName: nodeName.trim(),
|
|
273
|
+
token: result.token,
|
|
274
|
+
createdAt: new Date().toISOString(),
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
await saveConfig(config);
|
|
278
|
+
|
|
279
|
+
console.log('\n========================================');
|
|
280
|
+
console.log(' 注册成功!');
|
|
281
|
+
console.log(` 节点 ID: ${result.nodeId}`);
|
|
282
|
+
console.log(` 节点名称: ${nodeName.trim()}`);
|
|
283
|
+
console.log('========================================\n');
|
|
284
|
+
|
|
285
|
+
// 生成绑定二维码
|
|
286
|
+
await showBindQRCode(result.nodeId, nodeName.trim());
|
|
287
|
+
|
|
288
|
+
rl.close();
|
|
289
|
+
await startBridge(config);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
async function showBindQRCode(nodeId: string, nodeName: string) {
|
|
293
|
+
console.log('\n========================================');
|
|
294
|
+
console.log(' 请使用 App 扫码绑定此 OpenClaw');
|
|
295
|
+
console.log('========================================\n');
|
|
296
|
+
|
|
297
|
+
// 生成绑定数据
|
|
298
|
+
const bindData = JSON.stringify({
|
|
299
|
+
type: 'bind_openclaw',
|
|
300
|
+
node_id: nodeId,
|
|
301
|
+
name: nodeName,
|
|
302
|
+
timestamp: Date.now(),
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
console.log('绑定数据:', bindData);
|
|
306
|
+
console.log('\n');
|
|
307
|
+
|
|
308
|
+
// 显示二维码(大尺寸)
|
|
309
|
+
qrcode.generate(bindData, { small: true });
|
|
310
|
+
|
|
311
|
+
console.log('\n');
|
|
312
|
+
console.log('节点 ID:', nodeId);
|
|
313
|
+
console.log('提示: 打开 App -> AI助手 -> 扫码添加');
|
|
314
|
+
console.log('扫码后将自动绑定并添加好友');
|
|
315
|
+
console.log('如果扫码失败,可在 App 中手动输入节点 ID');
|
|
316
|
+
|
|
317
|
+
// 等待用户确认
|
|
318
|
+
await question('\n扫码完成后按 Enter 继续...');
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
main().catch(err => {
|
|
322
|
+
console.error('[Bridge] 启动失败:', err);
|
|
323
|
+
process.exit(1);
|
|
324
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-runner.d.ts","sourceRoot":"","sources":["../bridge-runner.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { RongCloudClient } from './src/rongcloud-client';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import * as readline from 'readline';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as crypto from 'crypto';
|
|
7
|
+
import * as os from 'os';
|
|
8
|
+
import { exec } from 'child_process';
|
|
9
|
+
import { promisify } from 'util';
|
|
10
|
+
import * as qrcode from 'qrcode-terminal';
|
|
11
|
+
const execAsync = promisify(exec);
|
|
12
|
+
const SERVER_URL = process.env.DM_SERVER_URL || 'https://newsradar.dreamdt.cn/im';
|
|
13
|
+
// const SERVER_URL = process.env.DM_SERVER_URL || 'http://127.0.0.1:5000/im';
|
|
14
|
+
const APP_KEY = process.env.DM_APP_KEY || 'bmdehs6pbyyks';
|
|
15
|
+
const CONFIG_DIR = path.join(os.homedir(), '.claw-bridge');
|
|
16
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
17
|
+
/**
|
|
18
|
+
* 查找 OpenClaw 配置文件
|
|
19
|
+
*/
|
|
20
|
+
function findOpenClawConfig() {
|
|
21
|
+
const possiblePaths = [
|
|
22
|
+
path.join(os.homedir(), '.openclaw', 'openclaw.json'),
|
|
23
|
+
path.join(os.homedir(), 'openclaw.json'),
|
|
24
|
+
path.join(process.env.APPDATA || '', 'openclaw', 'openclaw.json'),
|
|
25
|
+
];
|
|
26
|
+
for (const configPath of possiblePaths) {
|
|
27
|
+
if (fs.existsSync(configPath)) {
|
|
28
|
+
try {
|
|
29
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
30
|
+
return JSON.parse(content);
|
|
31
|
+
}
|
|
32
|
+
catch { }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取 OpenClaw Gateway Token
|
|
39
|
+
*/
|
|
40
|
+
function getOpenClawToken() {
|
|
41
|
+
// 1. 优先从环境变量
|
|
42
|
+
const envToken = process.env.OPENCLAW_GATEWAY_TOKEN || process.env.OPENCLAW_API_KEY;
|
|
43
|
+
if (envToken)
|
|
44
|
+
return envToken;
|
|
45
|
+
// 2. 从配置文件
|
|
46
|
+
const config = findOpenClawConfig();
|
|
47
|
+
if (config?.gateway?.auth?.token) {
|
|
48
|
+
return config.gateway.auth.token;
|
|
49
|
+
}
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
const rl = readline.createInterface({
|
|
53
|
+
input: process.stdin,
|
|
54
|
+
output: process.stdout
|
|
55
|
+
});
|
|
56
|
+
const question = (prompt) => {
|
|
57
|
+
return new Promise(resolve => rl.question(prompt, resolve));
|
|
58
|
+
};
|
|
59
|
+
function generateNodeId() {
|
|
60
|
+
const random = crypto.randomBytes(3).toString('hex');
|
|
61
|
+
return `claw_${random}`;
|
|
62
|
+
}
|
|
63
|
+
async function loadConfig() {
|
|
64
|
+
try {
|
|
65
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
66
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
67
|
+
return JSON.parse(content);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch { }
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
async function saveConfig(config) {
|
|
74
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
75
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
78
|
+
console.log(`[Bridge] 配置已保存: ${CONFIG_FILE}`);
|
|
79
|
+
}
|
|
80
|
+
async function registerNode(nodeName) {
|
|
81
|
+
const nodeId = generateNodeId();
|
|
82
|
+
console.log(`\n[Bridge] 正在注册节点: ${nodeId}...`);
|
|
83
|
+
try {
|
|
84
|
+
const resp = await axios.post(`${SERVER_URL}/api/claw/register`, {
|
|
85
|
+
node_id: nodeId,
|
|
86
|
+
name: nodeName,
|
|
87
|
+
}, { timeout: 10000 });
|
|
88
|
+
if (resp.data?.code === 200 || resp.data?.code === 409) {
|
|
89
|
+
const tokenResp = await axios.get(`${SERVER_URL}/api/claw/token/${nodeId}`, { timeout: 10000 });
|
|
90
|
+
if (tokenResp.data?.code === 200) {
|
|
91
|
+
return {
|
|
92
|
+
nodeId,
|
|
93
|
+
token: tokenResp.data.data.token,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
console.error('[Bridge] 注册失败:', resp.data?.message || '未知错误');
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.error('[Bridge] 注册异常:', err.message);
|
|
102
|
+
console.error('[Bridge] 请确保服务端正在运行: python server/app.py');
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function callOpenClaw(message) {
|
|
107
|
+
if (!message || !message.trim()) {
|
|
108
|
+
return '消息内容为空';
|
|
109
|
+
}
|
|
110
|
+
const sessionId = `im-${Date.now()}`;
|
|
111
|
+
const token = getOpenClawToken();
|
|
112
|
+
try {
|
|
113
|
+
console.log('[Bridge] 调用 OpenClaw CLI...');
|
|
114
|
+
// 使用 cmd /c 确保 Windows 下正确执行
|
|
115
|
+
const isWindows = process.platform === 'win32';
|
|
116
|
+
const cmd = isWindows
|
|
117
|
+
? `cmd /c openclaw agent -m "${message.replace(/"/g, '\\"')}" --session-id ${sessionId}`
|
|
118
|
+
: `openclaw agent -m "${message.replace(/"/g, '\\"')}" --session-id ${sessionId}`;
|
|
119
|
+
const env = { ...process.env };
|
|
120
|
+
if (token) {
|
|
121
|
+
env.OPENCLAW_GATEWAY_TOKEN = token;
|
|
122
|
+
}
|
|
123
|
+
const { stdout, stderr } = await execAsync(cmd, {
|
|
124
|
+
timeout: 120000,
|
|
125
|
+
maxBuffer: 1024 * 1024,
|
|
126
|
+
env,
|
|
127
|
+
});
|
|
128
|
+
const output = stdout || stderr || '';
|
|
129
|
+
// 过滤掉 [plugins] 行和 ANSI 颜色代码
|
|
130
|
+
const cleanOutput = output
|
|
131
|
+
.split('\n')
|
|
132
|
+
.filter(line => !line.includes('[plugins]'))
|
|
133
|
+
.map(line => line.replace(/\x1B\[[0-9;]*m/g, '').trim())
|
|
134
|
+
.filter(line => line.length > 0)
|
|
135
|
+
.join('\n');
|
|
136
|
+
return cleanOutput || 'OpenClaw 未返回有效响应';
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
if (err.killed) {
|
|
140
|
+
return 'OpenClaw 响应超时';
|
|
141
|
+
}
|
|
142
|
+
if (err.code === 'ENOENT') {
|
|
143
|
+
return '找不到 openclaw 命令';
|
|
144
|
+
}
|
|
145
|
+
return `OpenClaw 调用失败`;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function startBridge(config) {
|
|
149
|
+
console.log('\n[Bridge] ========== 启动 ==========');
|
|
150
|
+
console.log(` 节点 ID: ${config.nodeId}`);
|
|
151
|
+
console.log(` 节点名称: ${config.nodeName}`);
|
|
152
|
+
const client = new RongCloudClient({
|
|
153
|
+
appKey: APP_KEY,
|
|
154
|
+
token: config.token,
|
|
155
|
+
onMessage: async (msg) => {
|
|
156
|
+
if (msg.isOffLineMessage)
|
|
157
|
+
return;
|
|
158
|
+
if (msg.messageType !== 'RC:TxtMsg')
|
|
159
|
+
return;
|
|
160
|
+
if (msg.senderUserId === config.nodeId)
|
|
161
|
+
return;
|
|
162
|
+
const content = msg.content?.content || '';
|
|
163
|
+
const fromUser = msg.senderUserId;
|
|
164
|
+
const targetId = msg.targetId;
|
|
165
|
+
const convType = msg.conversationType;
|
|
166
|
+
console.log(`\n[Bridge] 收到消息:`);
|
|
167
|
+
console.log(` 来自: ${fromUser}`);
|
|
168
|
+
console.log(` 类型: ${convType === 3 ? '群聊' : '私聊'}`);
|
|
169
|
+
console.log(` 内容: ${content.substring(0, 50)}${content.length > 50 ? '...' : ''}`);
|
|
170
|
+
const reply = await callOpenClaw(content);
|
|
171
|
+
console.log(`[Bridge] 回复: ${reply.substring(0, 50)}...`);
|
|
172
|
+
try {
|
|
173
|
+
await client.sendMessage(convType === 3 ? targetId : fromUser, reply, convType);
|
|
174
|
+
console.log('[Bridge] 已发送');
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
console.error('[Bridge] 发送失败:', err.message);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
onConnectSuccess: (userId) => {
|
|
181
|
+
console.log(`\n[Bridge] 连接成功! userId: ${userId}`);
|
|
182
|
+
console.log('[Bridge] 等待消息...\n');
|
|
183
|
+
},
|
|
184
|
+
onError: (code) => {
|
|
185
|
+
console.error(`[Bridge] 连接错误: ${code}`);
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
console.log('\n[Bridge] 连接融云...');
|
|
189
|
+
await client.connect();
|
|
190
|
+
console.log('\n[Bridge] 监听中... (Ctrl+C 退出)');
|
|
191
|
+
process.stdin.resume();
|
|
192
|
+
process.on('SIGINT', () => {
|
|
193
|
+
console.log('\n[Bridge] 退出');
|
|
194
|
+
process.exit(0);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async function main() {
|
|
198
|
+
console.log('[Bridge] claw_messenger v1.0.0');
|
|
199
|
+
console.log(`[Bridge] 配置文件: ${CONFIG_FILE}\n`);
|
|
200
|
+
let config = await loadConfig();
|
|
201
|
+
if (config) {
|
|
202
|
+
console.log('[Bridge] 已加载配置:');
|
|
203
|
+
console.log(` 节点 ID: ${config.nodeId}`);
|
|
204
|
+
console.log(` 节点名称: ${config.nodeName}`);
|
|
205
|
+
const reset = await question('\n是否重新注册? (y/N): ');
|
|
206
|
+
if (reset.toLowerCase() !== 'y') {
|
|
207
|
+
rl.close();
|
|
208
|
+
await startBridge(config);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
console.log('\n========================================');
|
|
213
|
+
console.log(' claw_messenger - 注册');
|
|
214
|
+
console.log('========================================\n');
|
|
215
|
+
const nodeName = await question('请输入节点昵称 (如: 我的龙虾): ');
|
|
216
|
+
if (!nodeName.trim()) {
|
|
217
|
+
console.error('[Bridge] 昵称不能为空');
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
const result = await registerNode(nodeName.trim());
|
|
221
|
+
if (!result) {
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
config = {
|
|
225
|
+
nodeId: result.nodeId,
|
|
226
|
+
nodeName: nodeName.trim(),
|
|
227
|
+
token: result.token,
|
|
228
|
+
createdAt: new Date().toISOString(),
|
|
229
|
+
};
|
|
230
|
+
await saveConfig(config);
|
|
231
|
+
console.log('\n========================================');
|
|
232
|
+
console.log(' 注册成功!');
|
|
233
|
+
console.log(` 节点 ID: ${result.nodeId}`);
|
|
234
|
+
console.log(` 节点名称: ${nodeName.trim()}`);
|
|
235
|
+
console.log('========================================\n');
|
|
236
|
+
// 生成绑定二维码
|
|
237
|
+
await showBindQRCode(result.nodeId, nodeName.trim());
|
|
238
|
+
rl.close();
|
|
239
|
+
await startBridge(config);
|
|
240
|
+
}
|
|
241
|
+
async function showBindQRCode(nodeId, nodeName) {
|
|
242
|
+
console.log('\n========================================');
|
|
243
|
+
console.log(' 请使用 App 扫码绑定此 OpenClaw');
|
|
244
|
+
console.log('========================================\n');
|
|
245
|
+
// 生成绑定数据
|
|
246
|
+
const bindData = JSON.stringify({
|
|
247
|
+
type: 'bind_openclaw',
|
|
248
|
+
node_id: nodeId,
|
|
249
|
+
name: nodeName,
|
|
250
|
+
timestamp: Date.now(),
|
|
251
|
+
});
|
|
252
|
+
console.log('绑定数据:', bindData);
|
|
253
|
+
console.log('\n');
|
|
254
|
+
// 显示二维码(大尺寸)
|
|
255
|
+
qrcode.generate(bindData, { small: true });
|
|
256
|
+
console.log('\n');
|
|
257
|
+
console.log('节点 ID:', nodeId);
|
|
258
|
+
console.log('提示: 打开 App -> AI助手 -> 扫码添加');
|
|
259
|
+
console.log('扫码后将自动绑定并添加好友');
|
|
260
|
+
console.log('如果扫码失败,可在 App 中手动输入节点 ID');
|
|
261
|
+
// 等待用户确认
|
|
262
|
+
await question('\n扫码完成后按 Enter 继续...');
|
|
263
|
+
}
|
|
264
|
+
main().catch(err => {
|
|
265
|
+
console.error('[Bridge] 启动失败:', err);
|
|
266
|
+
process.exit(1);
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=bridge-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-runner.js","sourceRoot":"","sources":["../bridge-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-register.d.ts","sourceRoot":"","sources":["../../src/auto-register.ts"],"names":[],"mappings":"AAyEA,wBAAsB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E"}
|