claw-subagent-service 0.0.46 → 0.0.48
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/cli.js +2 -0
- package/package.json +1 -1
- package/service/daemon.js +2 -0
- package/service/rongcloud/rongcloud-client.js +17 -4
- package/service/worker.js +3 -0
package/cli.js
CHANGED
|
@@ -26,6 +26,8 @@ const command = args[0] || '--run';
|
|
|
26
26
|
|
|
27
27
|
function runDaemon() {
|
|
28
28
|
console.log('[CLI] 启动 Daemon...');
|
|
29
|
+
console.log(`[CLI] CLI 路径: ${__filename}`);
|
|
30
|
+
console.log(`[CLI] Daemon 路径: ${DAEMON_PATH}`);
|
|
29
31
|
|
|
30
32
|
const daemon = spawn('node', [DAEMON_PATH], {
|
|
31
33
|
stdio: 'inherit',
|
package/package.json
CHANGED
package/service/daemon.js
CHANGED
|
@@ -177,6 +177,8 @@ function startWorker(isAfterUpdate = false, backupDirForRollback = null) {
|
|
|
177
177
|
if (stopping || isRollingBack) return;
|
|
178
178
|
|
|
179
179
|
log.info(`[DAEMON] 启动 Worker,daemon PID: ${process.pid},更新后重启: ${isAfterUpdate}`);
|
|
180
|
+
log.info(`[DAEMON] Daemon 目录: ${__dirname}`);
|
|
181
|
+
log.info(`[DAEMON] Worker 路径: ${WORKER_PATH}`);
|
|
180
182
|
|
|
181
183
|
// 启动前释放旧端口,防止旧 worker 残留占用
|
|
182
184
|
freePortIfNeeded(PORT);
|
|
@@ -42,16 +42,24 @@ class RongCloudClient {
|
|
|
42
42
|
this.log?.info(`[RongCloudClient] has sendReadReceiptResponseV2: ${typeof RongIMLib.sendReadReceiptResponseV2 === 'function'}`);
|
|
43
43
|
this.log?.info(`[RongCloudClient] has sendReadReceiptResponseV5: ${typeof RongIMLib.sendReadReceiptResponseV5 === 'function'}`);
|
|
44
44
|
|
|
45
|
+
// 优先使用新版 addEventListener;与旧版 setOnReceiveMessageListener 互斥
|
|
46
|
+
// 避免同时注册导致 SDK 内部回调冲突或覆盖
|
|
45
47
|
if (RongIMLib.addEventListener) {
|
|
46
48
|
this.log?.info('[RongCloudClient] 使用 addEventListener 模式');
|
|
47
49
|
|
|
48
50
|
RongIMLib.addEventListener(RongIMLib.Events?.MESSAGES || 'MESSAGES', (event) => {
|
|
49
|
-
|
|
51
|
+
this.log?.info(`[RongCloudClient] MESSAGES 事件触发, messages长度=${event?.messages?.length || 0}`);
|
|
50
52
|
event.messages?.forEach(msg => {
|
|
53
|
+
this.log?.info(`[RongCloudClient] MESSAGES 单条消息: messageType=${msg.messageType}, senderUserId=${msg.senderUserId}, conversationType=${msg.conversationType}, isOffLineMessage=${msg.isOffLineMessage}, messageDirection=${msg.messageDirection}`);
|
|
51
54
|
this.handleReceivedMessage(msg);
|
|
52
55
|
});
|
|
53
56
|
});
|
|
54
57
|
|
|
58
|
+
// 调试:监听消息被拦截事件
|
|
59
|
+
RongIMLib.addEventListener(RongIMLib.Events?.MESSAGE_BLOCKED || 'MESSAGE_BLOCKED', (data) => {
|
|
60
|
+
this.log?.warn(`[RongCloudClient] 消息被拦截: ${JSON.stringify(data).substring(0, 200)}`);
|
|
61
|
+
});
|
|
62
|
+
|
|
55
63
|
RongIMLib.addEventListener(RongIMLib.Events?.CONNECTED || 'CONNECTED', () => {
|
|
56
64
|
this.log?.info('[RongCloudClient] 连接成功事件');
|
|
57
65
|
this.isConnected = true;
|
|
@@ -61,9 +69,8 @@ class RongCloudClient {
|
|
|
61
69
|
this.log?.warn(`[RongCloudClient] 断开连接, code: ${code}`);
|
|
62
70
|
this.isConnected = false;
|
|
63
71
|
});
|
|
64
|
-
} else {
|
|
72
|
+
} else if (RongIMLib.setOnReceiveMessageListener) {
|
|
65
73
|
this.log?.info('[RongCloudClient] 使用 setOnReceiveMessageListener 模式');
|
|
66
|
-
|
|
67
74
|
RongIMLib.setConnectionStatusListener({
|
|
68
75
|
onChanged: (status) => {
|
|
69
76
|
this.log?.info(`[RongCloudClient] 连接状态变化: ${status}`);
|
|
@@ -73,7 +80,7 @@ class RongCloudClient {
|
|
|
73
80
|
|
|
74
81
|
RongIMLib.setOnReceiveMessageListener({
|
|
75
82
|
onReceived: (message) => {
|
|
76
|
-
this.log?.info(`[RongCloudClient] onReceived: messageType=${message.messageType}, senderUserId=${message.senderUserId}`);
|
|
83
|
+
this.log?.info(`[RongCloudClient] onReceived: messageType=${message.messageType}, senderUserId=${message.senderUserId}, conversationType=${message.conversationType}, isOffLineMessage=${message.isOffLineMessage}, messageDirection=${message.messageDirection}`);
|
|
77
84
|
this.handleReceivedMessage(message);
|
|
78
85
|
}
|
|
79
86
|
});
|
|
@@ -100,6 +107,9 @@ class RongCloudClient {
|
|
|
100
107
|
}
|
|
101
108
|
|
|
102
109
|
handleReceivedMessage(message) {
|
|
110
|
+
// 最外层日志:确保任何消息到达都能留下痕迹(在过滤之前)
|
|
111
|
+
this.log?.info(`[RongCloudClient] handleReceivedMessage 入口: messageType=${message.messageType}, senderUserId=${message.senderUserId}, conversationType=${message.conversationType}, isOffLineMessage=${message.isOffLineMessage}, messageDirection=${message.messageDirection}, messageUId=${message.messageUId}`);
|
|
112
|
+
|
|
103
113
|
// 1. 不再静默过滤离线消息:Docker 中每次启动都是新连接,
|
|
104
114
|
// 群聊@消息常以离线消息形式推送,过滤会导致消息丢失
|
|
105
115
|
if (message.isOffLineMessage) {
|
|
@@ -109,15 +119,18 @@ class RongCloudClient {
|
|
|
109
119
|
// 2. 过滤自己发送的消息(融云 SDK 可能将发送消息回传)
|
|
110
120
|
// messageDirection: 1=发送, 2=接收
|
|
111
121
|
if (message.messageDirection === 1) {
|
|
122
|
+
this.log?.info('[RongCloudClient] 过滤自己发送的消息 (messageDirection=1)');
|
|
112
123
|
return;
|
|
113
124
|
}
|
|
114
125
|
if (message.senderUserId === this.config.accountId) {
|
|
126
|
+
this.log?.info(`[RongCloudClient] 过滤自己发送的消息 (senderUserId=${message.senderUserId} === accountId=${this.config.accountId})`);
|
|
115
127
|
return;
|
|
116
128
|
}
|
|
117
129
|
|
|
118
130
|
// 3. 消息去重:防止同一条消息被多次触发(融云重推或多端同步)
|
|
119
131
|
const dedupKey = message.messageUId || `${message.senderUserId}-${message.sentTime}-${message.messageType}`;
|
|
120
132
|
if (this.processedMessageUIds.has(dedupKey)) {
|
|
133
|
+
this.log?.info(`[RongCloudClient] 消息去重过滤: dedupKey=${dedupKey}`);
|
|
121
134
|
return;
|
|
122
135
|
}
|
|
123
136
|
this.processedMessageUIds.add(dedupKey);
|
package/service/worker.js
CHANGED
|
@@ -260,6 +260,9 @@ async function refreshRongCloudToken() {
|
|
|
260
260
|
async function initRongCloud() {
|
|
261
261
|
if (!rongcloudConfig) return;
|
|
262
262
|
|
|
263
|
+
log.info(`[WORKER] Worker 启动,目录: ${__dirname}`);
|
|
264
|
+
log.info(`[WORKER] 代码版本特征: isOffLineMessage-pass-through, messageDirection-log, addEventListener-exclusive`);
|
|
265
|
+
|
|
263
266
|
// 启动 opencode 服务(与桌面客户端对齐)
|
|
264
267
|
log.info('[WORKER] 启动 opencode 服务...');
|
|
265
268
|
try {
|