claw-subagent-service 0.0.170 → 0.0.172

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 (2) hide show
  1. package/package.json +1 -1
  2. package/service/worker.js +31 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claw-subagent-service",
3
- "version": "0.0.170",
3
+ "version": "0.0.172",
4
4
  "description": "虾说智能助手",
5
5
  "main": "cli.js",
6
6
  "bin": {
package/service/worker.js CHANGED
@@ -135,7 +135,7 @@ try {
135
135
  process.cwd();
136
136
  } catch (e) {
137
137
  if (e.code === 'ENOENT') {
138
- try { process.chdir(os.tmpdir()); } catch {}
138
+ try { process.chdir(os.tmpdir()); } catch { }
139
139
  }
140
140
  }
141
141
 
@@ -224,7 +224,6 @@ function loadRongCloudConfig() {
224
224
 
225
225
  if (!config.appKey) {
226
226
  config.appKey = process.env.DM_APP_KEY || 'bmdehs6pbyyks';
227
- log.info(`[WORKER] 使用默认 appKey: ${config.appKey}`);
228
227
  }
229
228
 
230
229
  // 设置默认心跳间隔为20秒
@@ -232,7 +231,7 @@ function loadRongCloudConfig() {
232
231
  config.heartbeatInterval = 20;
233
232
  }
234
233
 
235
- log.info(`[WORKER] 最终 apiBaseUrl: ${config.apiBaseUrl}`);
234
+ // log.info(`[WORKER] 最终 apiBaseUrl: ${config.apiBaseUrl}`);
236
235
 
237
236
  if (config.token && config.accountId) {
238
237
  return config;
@@ -263,6 +262,7 @@ async function refreshRongCloudToken() {
263
262
  const resp = await axios.get(`${serverUrl}/api/claw/token/${nodeId}`, { timeout: 15000 });
264
263
  if (resp.data?.code === 200) {
265
264
  const newToken = resp.data.data?.token || resp.data.token || '';
265
+ const newAppKey = resp.data.data?.app_key || resp.data.app_key || '';
266
266
  if (!newToken) {
267
267
  log.error('[WORKER] 服务端返回了空 token');
268
268
  return false;
@@ -271,12 +271,19 @@ async function refreshRongCloudToken() {
271
271
 
272
272
  // 更新内存配置
273
273
  rongcloudConfig.token = newToken;
274
+ if (newAppKey) {
275
+ rongcloudConfig.appKey = newAppKey;
276
+ log.info(`[WORKER] appKey 已更新: ${newAppKey}`);
277
+ }
274
278
 
275
279
  // 保存到 config.json
276
280
  try {
277
281
  if (fs.existsSync(clawBridgeConfigPath)) {
278
282
  const clawConfig = JSON.parse(fs.readFileSync(clawBridgeConfigPath, 'utf8'));
279
283
  clawConfig.token = newToken;
284
+ if (newAppKey) {
285
+ clawConfig.appKey = newAppKey;
286
+ }
280
287
  clawConfig.expiresAt = Date.now() + 7 * 24 * 60 * 60 * 1000; // 7天
281
288
  fs.writeFileSync(clawBridgeConfigPath, JSON.stringify(clawConfig, null, 2));
282
289
  log.info('[WORKER] 新 token 已保存到 config.json');
@@ -289,7 +296,7 @@ async function refreshRongCloudToken() {
289
296
  log.error(`[WORKER] 刷新 token 失败: ${resp.data?.message || '未知错误'}`);
290
297
  return false;
291
298
  } catch (err) {
292
- log.error(`[WORKER] 刷新 token 异常: ${err.message}`);
299
+ log.error(`[WORKER] 刷新 token 异常: ${err.message}`);
293
300
  return false;
294
301
  }
295
302
  }
@@ -341,12 +348,17 @@ async function syncCustomerServiceAccountId() {
341
348
 
342
349
  if (tokenResp.data?.code === 200) {
343
350
  const newToken = tokenResp.data.data?.token || tokenResp.data.token || '';
351
+ const newAppKey = tokenResp.data.data?.app_key || tokenResp.data.app_key || '';
344
352
  if (newToken) {
345
353
  log.info(`[WORKER] 获取客服账号 token 成功: ${csAccountId}`);
346
354
 
347
355
  // 更新内存配置(影响后续融云连接)
348
356
  rongcloudConfig.accountId = csAccountId;
349
357
  rongcloudConfig.token = newToken;
358
+ if (newAppKey) {
359
+ rongcloudConfig.appKey = newAppKey;
360
+ log.info(`[WORKER] 客服账号 appKey 已更新: ${newAppKey}`);
361
+ }
350
362
 
351
363
  // 持久化到本地 config.json(确保重启后仍使用新配置)
352
364
  try {
@@ -354,6 +366,9 @@ async function syncCustomerServiceAccountId() {
354
366
  const clawConfig = JSON.parse(fs.readFileSync(clawBridgeConfigPath, 'utf8'));
355
367
  clawConfig.nodeId = csAccountId;
356
368
  clawConfig.token = newToken;
369
+ if (newAppKey) {
370
+ clawConfig.appKey = newAppKey;
371
+ }
357
372
  clawConfig.expiresAt = Date.now() + 7 * 24 * 60 * 60 * 1000; // 7天
358
373
  fs.writeFileSync(clawBridgeConfigPath, JSON.stringify(clawConfig, null, 2));
359
374
  log.info(`[WORKER] 客服账号已持久化到 config.json: ${csAccountId}`);
@@ -402,7 +417,7 @@ async function initRongCloud() {
402
417
  const configChanged = await syncCustomerServiceAccountId();
403
418
  if (configChanged) {
404
419
  log.info('[WORKER] 客服账号已切换到数据库配置的 ID,将使用新配置连接融云');
405
- }
420
+ }
406
421
  log.info(`[WORKER] 代码版本特征: isOffLineMessage-pass-through, messageDirection-log, addEventListener-exclusive`);
407
422
 
408
423
  // 启动 opencode 服务(与桌面客户端对齐)
@@ -443,7 +458,7 @@ async function initRongCloud() {
443
458
  // 融云 SDK 对自定义消息可能直接返回对象而非 JSON 字符串
444
459
  if (msg.content) {
445
460
  let parsed = null;
446
-
461
+
447
462
  if (typeof msg.content === 'string') {
448
463
  // 字符串类型:尝试 JSON 解析
449
464
  try {
@@ -568,7 +583,7 @@ async function shutdownRongCloud() {
568
583
  if (global.dashboardReporter) {
569
584
  global.dashboardReporter.stop();
570
585
  }
571
-
586
+
572
587
  if (rongcloudClient) {
573
588
  // 发送 CLIENT_DISCONNECTED
574
589
  try {
@@ -578,11 +593,11 @@ async function shutdownRongCloud() {
578
593
  } catch (err) {
579
594
  log.error(`[WORKER] 发送 CLIENT_DISCONNECTED 失败: ${err.message}`);
580
595
  }
581
-
596
+
582
597
  await rongcloudClient.disconnect();
583
598
  log.info('[WORKER] 融云已断开');
584
599
  }
585
-
600
+
586
601
  // 停止 opencode 服务
587
602
  stopOpencodeService(log);
588
603
  }
@@ -644,7 +659,7 @@ server.on('error', (err) => {
644
659
  // 延迟 3 秒后重试,给进程退出和端口释放留出足够时间
645
660
  setTimeout(() => {
646
661
  log.info(`[WORKER] 重新尝试监听端口 ${PORT}...`);
647
- server.close(() => {});
662
+ server.close(() => { });
648
663
  server.listen(PORT, HOST);
649
664
  }, 3000);
650
665
  return;
@@ -681,20 +696,20 @@ async function gracefulShutdown(signal) {
681
696
  return;
682
697
  }
683
698
  isShuttingDown = true;
684
-
699
+
685
700
  log.info(`[WORKER] 收到 ${signal} 信号,开始优雅退出...`);
686
-
701
+
687
702
  try {
688
703
  await shutdownRongCloud();
689
704
  } catch (err) {
690
705
  log.error(`[WORKER] 关闭融云异常: ${err.message}`);
691
706
  }
692
-
707
+
693
708
  // 关闭 HTTP 服务
694
709
  server.close(() => {
695
710
  log.info('[WORKER] HTTP 服务已关闭');
696
711
  });
697
-
712
+
698
713
  // 给 3 秒时间完成关闭操作
699
714
  setTimeout(() => {
700
715
  log.info('[WORKER] 退出进程');
@@ -739,7 +754,7 @@ process.on('unhandledRejection', async (reason) => {
739
754
 
740
755
  // 拦截 process.exit 以定位调用来源
741
756
  const originalExit = process.exit;
742
- process.exit = function(code) {
757
+ process.exit = function (code) {
743
758
  const stack = new Error('process.exit called from:').stack;
744
759
  log.error(`[WORKER] process.exit(${code}) 被调用:\n${stack}`);
745
760
  originalExit.call(process, code);
@@ -752,7 +767,7 @@ process.on('exit', (code) => {
752
767
  // 同步发送,因为 exit 事件不支持异步
753
768
  try {
754
769
  const messageSender = new RongyunMessageSender(rongcloudClient, rongcloudConfig, log);
755
- messageSender.sendClientDisconnected().catch(() => {});
770
+ messageSender.sendClientDisconnected().catch(() => { });
756
771
  } catch (e) {
757
772
  // 忽略错误
758
773
  }