claw-subagent-service 0.0.119 → 0.0.121

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claw-subagent-service",
3
- "version": "0.0.119",
3
+ "version": "0.0.121",
4
4
  "description": "虾说智能助手",
5
5
  "main": "cli.js",
6
6
  "bin": {
@@ -633,11 +633,39 @@ class MessageHandler {
633
633
  sightUrl = content.sightUrl || content.url || '';
634
634
  name = content.name || '未知视频';
635
635
  duration = content.duration || 0;
636
+ } else if (typeof content === 'string') {
637
+ // 尝试解析 content 是否为 JSON(包含 sightUrl)
638
+ try {
639
+ const contentObj = JSON.parse(content);
640
+ if (contentObj.sightUrl) {
641
+ sightUrl = contentObj.sightUrl;
642
+ name = contentObj.name || '未知视频';
643
+ duration = contentObj.duration || 0;
644
+ }
645
+ } catch (e) {
646
+ // content 不是 JSON,可能是 base64 缩略图
647
+ sightUrl = msg.sightUrl || msg.url || msg.localPath || '';
648
+ }
636
649
  } else {
637
650
  sightUrl = msg.sightUrl || msg.url || msg.localPath || '';
638
651
  }
639
652
 
653
+ // 如果还是没有找到 URL,尝试从 extra 字段获取
654
+ if (!sightUrl && msg.extra) {
655
+ try {
656
+ const extraData = JSON.parse(msg.extra);
657
+ sightUrl = extraData.videoUrl || extraData.sightUrl || '';
658
+ } catch (e) {
659
+ // extra 不是 JSON,忽略
660
+ }
661
+ }
662
+
640
663
  this.log?.info(`[_extractMessageContent] 视频消息: sightUrl=${sightUrl}`);
664
+
665
+ if (!sightUrl) {
666
+ return '[视频](无法获取视频地址)';
667
+ }
668
+
641
669
  return `[视频] ${sightUrl} ${name} ${duration}秒`;
642
670
  }
643
671
 
@@ -651,11 +679,37 @@ class MessageHandler {
651
679
  fileUrl = content.fileUrl || content.fileUri || content.url || '';
652
680
  name = content.name || '未知文件';
653
681
  size = content.size || 0;
682
+ } else if (typeof content === 'string') {
683
+ // 尝试解析 content 是否为 JSON(包含 fileUrl)
684
+ try {
685
+ const contentObj = JSON.parse(content);
686
+ if (contentObj.fileUrl) {
687
+ fileUrl = contentObj.fileUrl;
688
+ }
689
+ } catch (e) {
690
+ // content 不是 JSON
691
+ fileUrl = msg.fileUrl || msg.fileUri || msg.url || msg.localPath || '';
692
+ }
654
693
  } else {
655
694
  fileUrl = msg.fileUrl || msg.fileUri || msg.url || msg.localPath || '';
656
695
  }
657
696
 
697
+ // 如果还是没有找到 URL,尝试从 extra 字段获取
698
+ if (!fileUrl && msg.extra) {
699
+ try {
700
+ const extraData = JSON.parse(msg.extra);
701
+ fileUrl = extraData.fileUrl || extraData.fileUri || '';
702
+ } catch (e) {
703
+ // extra 不是 JSON,忽略
704
+ }
705
+ }
706
+
658
707
  this.log?.info(`[_extractMessageContent] 文件消息: fileUrl=${fileUrl}`);
708
+
709
+ if (!fileUrl) {
710
+ return '[文件](无法获取文件地址)';
711
+ }
712
+
659
713
  return `[文件] ${fileUrl} ${name} ${size}`;
660
714
  }
661
715
 
@@ -172,6 +172,9 @@ class RongCloudClient {
172
172
  // command 等结构化消息保留完整 JSON(上层需要 msg_type 等字段)
173
173
  if (message.messageType === 'command' || rawContent.msg_type) {
174
174
  rawContent = JSON.stringify(rawContent);
175
+ } else if (['RC:ImgMsg', 'RC:SightMsg', 'RC:FileMsg', 'RC:HQVCMsg'].includes(message.messageType)) {
176
+ // 媒体消息保留完整对象,以便上层提取 URL
177
+ rawContent = JSON.stringify(rawContent);
175
178
  } else {
176
179
  rawContent = rawContent.content || rawContent.text || JSON.stringify(rawContent);
177
180
  }