@quukk/opencode-clawmessenger 0.3.0 → 1.0.4

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 (106) hide show
  1. package/README.md +71 -623
  2. package/bin/opencode-clawmessenger +2 -2
  3. package/bin/opencode-clawmessenger-setup +5 -5
  4. package/dist/cli.d.ts +0 -1
  5. package/dist/cli.js +1 -288
  6. package/dist/core/auto-register.d.ts +0 -1
  7. package/dist/core/auto-register.js +1 -174
  8. package/dist/core/auto-serve.d.ts +13 -0
  9. package/dist/core/auto-serve.js +1 -0
  10. package/dist/core/config.d.ts +2 -3
  11. package/dist/core/config.js +1 -80
  12. package/dist/core/daemon.d.ts +0 -1
  13. package/dist/core/daemon.js +1 -77
  14. package/dist/core/dedup.d.ts +0 -1
  15. package/dist/core/dedup.js +1 -25
  16. package/dist/core/hook-manager.d.ts +0 -1
  17. package/dist/core/hook-manager.js +1 -33
  18. package/dist/core/logger.d.ts +0 -1
  19. package/dist/core/logger.js +1 -49
  20. package/dist/core/mac-address.d.ts +0 -1
  21. package/dist/core/mac-address.js +1 -43
  22. package/dist/core/message-handler.d.ts +0 -1
  23. package/dist/core/message-handler.js +1 -988
  24. package/dist/core/ops-assistant.d.ts +0 -1
  25. package/dist/core/ops-assistant.js +1 -270
  26. package/dist/core/qr-crypto.d.ts +0 -1
  27. package/dist/core/qr-crypto.js +1 -66
  28. package/dist/core/session-manager.d.ts +0 -1
  29. package/dist/core/session-manager.js +1 -144
  30. package/dist/core/types.d.ts +1 -2
  31. package/dist/core/types.js +1 -26
  32. package/dist/index.d.ts +0 -1
  33. package/dist/index.js +1 -16
  34. package/dist/openclaw/client.d.ts +0 -1
  35. package/dist/openclaw/client.js +1 -494
  36. package/dist/opencode/client.d.ts +0 -1
  37. package/dist/opencode/client.js +1 -279
  38. package/dist/opencode/event-handler.d.ts +0 -1
  39. package/dist/opencode/event-handler.js +1 -467
  40. package/dist/plugin.d.ts +0 -1
  41. package/dist/plugin.js +1 -148
  42. package/dist/rongcloud/client.d.ts +0 -1
  43. package/dist/rongcloud/client.js +1 -292
  44. package/dist/rongcloud/env-polyfill.d.ts +0 -1
  45. package/dist/rongcloud/env-polyfill.js +1 -107
  46. package/dist/rongcloud/server-api.d.ts +0 -1
  47. package/dist/rongcloud/server-api.js +1 -157
  48. package/dist/standalone.d.ts +0 -1
  49. package/dist/standalone.js +1 -229
  50. package/dist/types/plugin.d.ts +0 -1
  51. package/dist/types/plugin.js +1 -2
  52. package/dist/websocket/client.d.ts +0 -1
  53. package/dist/websocket/client.js +1 -88
  54. package/dist/websocket/server-client.d.ts +0 -1
  55. package/dist/websocket/server-client.js +1 -98
  56. package/package.json +83 -81
  57. package/dist/cli.d.ts.map +0 -1
  58. package/dist/cli.js.map +0 -1
  59. package/dist/core/auto-register.d.ts.map +0 -1
  60. package/dist/core/auto-register.js.map +0 -1
  61. package/dist/core/config.d.ts.map +0 -1
  62. package/dist/core/config.js.map +0 -1
  63. package/dist/core/daemon.d.ts.map +0 -1
  64. package/dist/core/daemon.js.map +0 -1
  65. package/dist/core/dedup.d.ts.map +0 -1
  66. package/dist/core/dedup.js.map +0 -1
  67. package/dist/core/hook-manager.d.ts.map +0 -1
  68. package/dist/core/hook-manager.js.map +0 -1
  69. package/dist/core/logger.d.ts.map +0 -1
  70. package/dist/core/logger.js.map +0 -1
  71. package/dist/core/mac-address.d.ts.map +0 -1
  72. package/dist/core/mac-address.js.map +0 -1
  73. package/dist/core/message-handler.d.ts.map +0 -1
  74. package/dist/core/message-handler.js.map +0 -1
  75. package/dist/core/ops-assistant.d.ts.map +0 -1
  76. package/dist/core/ops-assistant.js.map +0 -1
  77. package/dist/core/qr-crypto.d.ts.map +0 -1
  78. package/dist/core/qr-crypto.js.map +0 -1
  79. package/dist/core/session-manager.d.ts.map +0 -1
  80. package/dist/core/session-manager.js.map +0 -1
  81. package/dist/core/types.d.ts.map +0 -1
  82. package/dist/core/types.js.map +0 -1
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/index.js.map +0 -1
  85. package/dist/openclaw/client.d.ts.map +0 -1
  86. package/dist/openclaw/client.js.map +0 -1
  87. package/dist/opencode/client.d.ts.map +0 -1
  88. package/dist/opencode/client.js.map +0 -1
  89. package/dist/opencode/event-handler.d.ts.map +0 -1
  90. package/dist/opencode/event-handler.js.map +0 -1
  91. package/dist/plugin.d.ts.map +0 -1
  92. package/dist/plugin.js.map +0 -1
  93. package/dist/rongcloud/client.d.ts.map +0 -1
  94. package/dist/rongcloud/client.js.map +0 -1
  95. package/dist/rongcloud/env-polyfill.d.ts.map +0 -1
  96. package/dist/rongcloud/env-polyfill.js.map +0 -1
  97. package/dist/rongcloud/server-api.d.ts.map +0 -1
  98. package/dist/rongcloud/server-api.js.map +0 -1
  99. package/dist/standalone.d.ts.map +0 -1
  100. package/dist/standalone.js.map +0 -1
  101. package/dist/types/plugin.d.ts.map +0 -1
  102. package/dist/types/plugin.js.map +0 -1
  103. package/dist/websocket/client.d.ts.map +0 -1
  104. package/dist/websocket/client.js.map +0 -1
  105. package/dist/websocket/server-client.d.ts.map +0 -1
  106. package/dist/websocket/server-client.js.map +0 -1
@@ -1,467 +1 @@
1
- import { createLogger } from '../core/logger.js';
2
- import { RongCloudServerAPI } from '../rongcloud/server-api.js';
3
- const log = createLogger('EventHandler');
4
- export class EventHandler {
5
- constructor(sessionManager, rongClient, opencode, config) {
6
- this.isRunning = false;
7
- this.sentSessions = new Set();
8
- this.streamStates = new Map();
9
- this.streamQueue = Promise.resolve(); // 流式消息串行队列
10
- this.sessionManager = sessionManager;
11
- this.rongClient = rongClient;
12
- this.opencode = opencode;
13
- this.config = config;
14
- this.streamAPI = new RongCloudServerAPI(config.appKey, config.appSecret || '');
15
- }
16
- async start(eventStream) {
17
- if (this.isRunning)
18
- return;
19
- this.isRunning = true;
20
- log.info('Event handler started');
21
- try {
22
- for await (const event of eventStream.stream) {
23
- if (!this.isRunning)
24
- break;
25
- await this.handleEvent(event);
26
- }
27
- }
28
- catch (err) {
29
- log.error({ err }, 'SSE stream error');
30
- }
31
- finally {
32
- this.isRunning = false;
33
- }
34
- }
35
- stop() {
36
- this.isRunning = false;
37
- }
38
- /**
39
- * 获取发送者ID
40
- * 对于客服聊天,使用客服账号ID作为发送者,而不是当前节点ID
41
- * 这样可以确保客服消息和普通消息在不同的会话中
42
- */
43
- getFromUserId(sessionId) {
44
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
45
- if (chatId) {
46
- const session = this.sessionManager.getSession(chatId);
47
- if (session?.extra?.serviceTargetId) {
48
- return session.extra.serviceTargetId;
49
- }
50
- }
51
- return this.config.accountId;
52
- }
53
- async handleEvent(globalEvent) {
54
- try {
55
- const payload = globalEvent.payload || globalEvent;
56
- const props = payload.properties || payload;
57
- log.info({ type: payload.type, hasProperties: !!payload.properties }, 'SSE event received');
58
- switch (payload.type) {
59
- case 'session.idle':
60
- log.info({ sessionId: props.sessionID }, 'Session idle event');
61
- await this.handleSessionIdle(props);
62
- break;
63
- case 'message.part.delta':
64
- // 细粒度 token 级流式增量
65
- await this.handleMessagePartDelta(props);
66
- break;
67
- case 'message.part.updated':
68
- log.info({ sessionId: props.sessionID }, 'Message part updated event');
69
- await this.handleMessagePartUpdated(props);
70
- break;
71
- case 'message.updated':
72
- log.info({ sessionId: props.sessionID, messageKeys: Object.keys(props.message || {}) }, 'Message updated event');
73
- await this.handleMessageUpdated(props);
74
- break;
75
- case 'session.status':
76
- this.handleStatusChange(props);
77
- break;
78
- case 'session.error':
79
- await this.handleError(props);
80
- break;
81
- default:
82
- log.debug({ type: payload.type }, 'Unhandled event type');
83
- }
84
- }
85
- catch (err) {
86
- log.error({ err }, 'Error handling event');
87
- }
88
- }
89
- /**
90
- * 处理 message.part.delta 事件(细粒度 token 级流式增量)
91
- * 从事件中直接提取增量文本,无需调用 fetchLastMessageText
92
- */
93
- async handleMessagePartDelta(properties) {
94
- const sessionId = properties.sessionID;
95
- log.info({ sessionId, hasDelta: !!properties.delta, hasText: !!properties.text, hasPart: !!properties.part }, 'handleMessagePartDelta called');
96
- // 需要 appSecret 才能调用融云服务端 API 发送流式消息
97
- if (!this.config.appSecret) {
98
- log.warn({ sessionId }, 'Streaming skipped: appSecret not configured');
99
- return;
100
- }
101
- // 如果已经发送过完整回复,跳过
102
- if (this.sentSessions.has(sessionId)) {
103
- log.warn({ sessionId }, 'Session already sent, skipping stream delta');
104
- return;
105
- }
106
- // 从事件中提取增量文本(兼容多种可能的结构)
107
- const delta = properties.delta || properties.text || properties.part?.delta || properties.part?.text || '';
108
- if (typeof delta !== 'string') {
109
- return;
110
- }
111
- // 注意:空字符串的 delta 是合法的(无新内容块),不跳过,继续执行以维持流状态
112
- // 初始化流式状态
113
- let streamState = this.streamStates.get(sessionId);
114
- if (!streamState) {
115
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
116
- if (!chatId) {
117
- log.warn({ sessionId }, 'No chatId found for message.part.delta');
118
- return;
119
- }
120
- streamState = {
121
- messageUID: '',
122
- seq: 1, // 融云要求 seq 从 1 开始
123
- lastContent: '',
124
- lastSentTime: Date.now(),
125
- fullContent: '',
126
- hasSentStream: false,
127
- chatId,
128
- targetId: chatId.startsWith('group_') ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', '')),
129
- isGroup: chatId.startsWith('group_'),
130
- };
131
- this.streamStates.set(sessionId, streamState);
132
- }
133
- // 累积完整内容
134
- streamState.fullContent += delta;
135
- log.info({ sessionId, seq: streamState.seq, deltaLength: delta.length }, 'Sending stream delta');
136
- // 使用队列确保流式消息片段串行发送
137
- this.streamQueue = this.streamQueue.then(async () => {
138
- try {
139
- const isFirstChunk = streamState.seq === 1;
140
- log.info({ sessionId, seq: streamState.seq, isFirstChunk, targetId: streamState.targetId, deltaLength: delta.length }, 'Sending stream chunk to RongCloud');
141
- if (streamState.isGroup) {
142
- const result = await this.streamAPI.sendStreamGroup({
143
- fromUserId: this.getFromUserId(sessionId),
144
- toGroupId: streamState.targetId,
145
- content: delta,
146
- isFirstChunk,
147
- isLastChunk: false,
148
- seq: streamState.seq,
149
- messageUID: streamState.messageUID || null,
150
- });
151
- if (result.messageUID)
152
- streamState.messageUID = result.messageUID;
153
- }
154
- else {
155
- const result = await this.streamAPI.sendStreamPrivate({
156
- fromUserId: this.getFromUserId(sessionId),
157
- toUserId: streamState.targetId,
158
- content: delta,
159
- isFirstChunk,
160
- isLastChunk: false,
161
- seq: streamState.seq,
162
- messageUID: streamState.messageUID || null,
163
- });
164
- if (result.messageUID)
165
- streamState.messageUID = result.messageUID;
166
- }
167
- streamState.seq++;
168
- streamState.hasSentStream = true;
169
- streamState.lastSentTime = Date.now();
170
- log.info({ sessionId, seq: streamState.seq - 1 }, 'Stream delta sent');
171
- }
172
- catch (err) {
173
- log.error({ err, sessionId, delta: delta.substring(0, 50) }, 'Stream delta send failed');
174
- }
175
- });
176
- await this.streamQueue;
177
- }
178
- async handleSessionIdle(properties) {
179
- const sessionId = properties.sessionID;
180
- // 立即标记已处理,防止并发重复发送
181
- if (this.sentSessions.has(sessionId)) {
182
- log.debug({ sessionId }, 'Already sent reply for this session, skipping');
183
- return;
184
- }
185
- this.sentSessions.add(sessionId);
186
- const streamState = this.streamStates.get(sessionId);
187
- // 如果已发送过流式片段,发送结束标记和 __stream_history__
188
- if (streamState && streamState.hasSentStream) {
189
- log.info({ sessionId, streamSeq: streamState.seq }, 'Finishing stream with last chunk');
190
- // 发送结束流式片段
191
- this.streamQueue = this.streamQueue.then(async () => {
192
- try {
193
- if (streamState.isGroup) {
194
- await this.streamAPI.sendStreamGroup({
195
- fromUserId: this.getFromUserId(sessionId),
196
- toGroupId: streamState.targetId,
197
- content: '',
198
- isFirstChunk: false,
199
- isLastChunk: true,
200
- seq: streamState.seq,
201
- messageUID: streamState.messageUID || null,
202
- });
203
- }
204
- else {
205
- await this.streamAPI.sendStreamPrivate({
206
- fromUserId: this.getFromUserId(sessionId),
207
- toUserId: streamState.targetId,
208
- content: '',
209
- isFirstChunk: false,
210
- isLastChunk: true,
211
- seq: streamState.seq,
212
- messageUID: streamState.messageUID || null,
213
- });
214
- }
215
- log.info({ sessionId, seq: streamState.seq }, 'Stream last chunk sent');
216
- }
217
- catch (err) {
218
- log.error({ err, sessionId }, 'Failed to send stream last chunk');
219
- }
220
- });
221
- await this.streamQueue;
222
- // 发送 __stream_history__ 普通文本消息作为持久化历史记录
223
- if (streamState.fullContent.trim()) {
224
- try {
225
- const historyContent = JSON.stringify({
226
- __stream_history__: true,
227
- streamId: streamState.messageUID || sessionId,
228
- text: streamState.fullContent,
229
- sentTime: Date.now(),
230
- });
231
- await this.rongClient.sendMessage(streamState.targetId, historyContent, streamState.isGroup ? 3 : 1);
232
- log.info({ sessionId, textLength: streamState.fullContent.length }, 'Stream history sent');
233
- }
234
- catch (err) {
235
- log.error({ err, sessionId }, 'Failed to send stream history');
236
- }
237
- }
238
- // 清理流式状态
239
- this.streamStates.delete(sessionId);
240
- this.sessionManager.updateStatus(streamState.chatId, 'idle');
241
- return;
242
- }
243
- // 清理流式状态(如果存在但未发送过流式)
244
- if (streamState) {
245
- this.streamStates.delete(sessionId);
246
- }
247
- log.info({ sessionId }, 'Handling session idle (no stream)');
248
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
249
- if (!chatId) {
250
- log.warn({ sessionId }, 'No chatId found for session');
251
- return;
252
- }
253
- // 没有流式发送过时,兜底发送完整消息
254
- const text = await this.opencode.fetchLastMessageText(sessionId);
255
- log.info({ sessionId, chatId, hasText: !!text }, 'Fetched last message');
256
- if (text) {
257
- const isGroup = chatId.startsWith('group_');
258
- const isServiceChat = chatId.startsWith('service-');
259
- const targetId = isGroup ? chatId.replace('group_', '') : (isServiceChat ? chatId.replace('service-', '') : chatId.replace('claw-', ''));
260
- const conversationType = isGroup ? 3 : 1;
261
- log.info({ targetId, textLength: text.length, isGroup, isServiceChat }, 'Sending reply via normal message');
262
- if (isServiceChat) {
263
- // 客服会话:发送 service_chat_response 格式的自定义消息
264
- const servicePayload = JSON.stringify({
265
- msg_type: 'service_chat_response',
266
- content: text,
267
- sessionId: sessionId,
268
- userId: targetId,
269
- status: 'success',
270
- timestamp: Math.floor(Date.now() / 1000),
271
- });
272
- await this.rongClient.sendMessage(targetId, servicePayload, conversationType);
273
- }
274
- else {
275
- // 普通会话:直接发送文本内容
276
- await this.rongClient.sendMessage(targetId, text, conversationType);
277
- }
278
- }
279
- this.sessionManager.updateStatus(chatId, 'idle');
280
- }
281
- async handleMessagePartUpdated(properties) {
282
- const sessionId = properties.sessionID;
283
- // message.part.updated 表示消息片段已更新(非增量)
284
- // 如果已经在流式发送中(由 message.part.delta 驱动),忽略
285
- if (this.streamStates.has(sessionId)) {
286
- log.debug({ sessionId }, 'Stream already active via delta, ignoring part.updated');
287
- return;
288
- }
289
- // 需要 appSecret 才能调用融云服务端 API 发送流式消息
290
- if (!this.config.appSecret) {
291
- log.debug({ sessionId }, 'Streaming skipped: appSecret not configured, falling back to session.idle reply');
292
- return;
293
- }
294
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
295
- if (!chatId) {
296
- log.warn({ sessionId }, 'No chatId found for message.part.updated');
297
- return;
298
- }
299
- // 如果已经发送过完整回复,跳过流式
300
- if (this.sentSessions.has(sessionId)) {
301
- log.debug({ sessionId }, 'Session already sent, skipping stream');
302
- return;
303
- }
304
- const isGroup = chatId.startsWith('group_');
305
- const targetId = isGroup ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', ''));
306
- try {
307
- const text = await this.opencode.fetchLastMessageText(sessionId);
308
- if (!text)
309
- return;
310
- // 初始化流式状态
311
- let streamState = this.streamStates.get(sessionId);
312
- if (!streamState) {
313
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
314
- if (!chatId) {
315
- log.warn({ sessionId }, 'No chatId found for message.part.updated');
316
- return;
317
- }
318
- streamState = {
319
- messageUID: '',
320
- seq: 1, // 融云要求 seq 从 1 开始
321
- lastContent: '',
322
- lastSentTime: Date.now(),
323
- fullContent: '',
324
- hasSentStream: false,
325
- chatId,
326
- targetId: chatId.startsWith('group_') ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', '')),
327
- isGroup: chatId.startsWith('group_'),
328
- };
329
- this.streamStates.set(sessionId, streamState);
330
- }
331
- // 只发送新增内容
332
- const newContent = text.slice(streamState.lastContent.length);
333
- if (!newContent)
334
- return;
335
- // 累积完整内容
336
- streamState.fullContent += newContent;
337
- log.info({ sessionId, seq: streamState.seq, newLength: newContent.length }, 'Sending stream chunk (from part.updated)');
338
- // 使用队列确保流式消息片段串行发送
339
- this.streamQueue = this.streamQueue.then(async () => {
340
- try {
341
- if (isGroup) {
342
- const result = await this.streamAPI.sendStreamGroup({
343
- fromUserId: this.getFromUserId(sessionId),
344
- toGroupId: targetId,
345
- content: newContent,
346
- isFirstChunk: streamState.seq === 1,
347
- isLastChunk: false,
348
- seq: streamState.seq,
349
- messageUID: streamState.messageUID || null,
350
- });
351
- if (result.messageUID)
352
- streamState.messageUID = result.messageUID;
353
- }
354
- else {
355
- const result = await this.streamAPI.sendStreamPrivate({
356
- fromUserId: this.getFromUserId(sessionId),
357
- toUserId: targetId,
358
- content: newContent,
359
- isFirstChunk: streamState.seq === 1,
360
- isLastChunk: false,
361
- seq: streamState.seq,
362
- messageUID: streamState.messageUID || null,
363
- });
364
- if (result.messageUID)
365
- streamState.messageUID = result.messageUID;
366
- }
367
- streamState.seq++;
368
- streamState.hasSentStream = true;
369
- streamState.lastContent = text;
370
- streamState.lastSentTime = Date.now();
371
- }
372
- catch (err) {
373
- log.error({ err, sessionId, targetId }, 'Stream send failed');
374
- // 流式发送失败时清理状态,让 session.idle 兜底发送完整消息
375
- this.streamStates.delete(sessionId);
376
- }
377
- });
378
- await this.streamQueue;
379
- }
380
- catch (err) {
381
- log.error({ err, sessionId, targetId }, 'Stream processing failed');
382
- this.streamStates.delete(sessionId);
383
- }
384
- }
385
- async handleMessageUpdated(properties) {
386
- const sessionId = properties.sessionID;
387
- // message.updated 只用于追踪消息内容更新,不发送消息
388
- // 如果已经在流式发送中,忽略
389
- if (this.streamStates.has(sessionId)) {
390
- return;
391
- }
392
- // 如果已发送,忽略
393
- if (this.sentSessions.has(sessionId)) {
394
- return;
395
- }
396
- // 只记录消息内容更新,不发送
397
- const chatId = this.sessionManager.getChatIdBySession(sessionId);
398
- if (!chatId) {
399
- log.warn({ sessionId }, 'No chatId found for message.updated');
400
- return;
401
- }
402
- const session = this.sessionManager.getSession(chatId);
403
- if (!session || session.status !== 'busy') {
404
- return;
405
- }
406
- // 尝试从事件的 message 对象直接获取文本(仅用于日志记录)
407
- const msg = properties.message;
408
- if (msg) {
409
- const role = msg.info?.role || msg.role;
410
- if (role === 'assistant' || role === 'model') {
411
- if (msg.parts && msg.parts.length > 0) {
412
- const textPart = msg.parts.find((p) => p.type === 'text');
413
- if (textPart?.text) {
414
- log.debug({ sessionId, textLength: textPart.text.length }, 'AI response content updated');
415
- }
416
- }
417
- }
418
- }
419
- }
420
- handleStatusChange(properties) {
421
- const chatId = this.sessionManager.getChatIdBySession(properties.sessionID);
422
- if (chatId && properties.status.type === 'busy') {
423
- this.sessionManager.updateStatus(chatId, 'busy');
424
- // Clear sentSessions to allow new replies in this session
425
- if (this.sentSessions.delete(properties.sessionID)) {
426
- log.debug({ sessionId: properties.sessionID }, 'Cleared sent flag for new message turn');
427
- }
428
- }
429
- }
430
- async handleError(properties) {
431
- if (!properties.sessionID)
432
- return;
433
- const chatId = this.sessionManager.getChatIdBySession(properties.sessionID);
434
- if (!chatId)
435
- return;
436
- // 从错误对象中提取可读消息
437
- let errorMessage;
438
- if (typeof properties.error === 'string') {
439
- errorMessage = properties.error;
440
- }
441
- else if (properties.error?.data?.message) {
442
- errorMessage = properties.error.data.message;
443
- }
444
- else if (properties.error?.message) {
445
- errorMessage = properties.error.message;
446
- }
447
- else {
448
- errorMessage = 'AI 处理失败,请稍后重试';
449
- }
450
- // 标记为已处理,防止 session.idle 重复发送
451
- this.sentSessions.add(properties.sessionID);
452
- // 如果正在流式发送,清理状态
453
- const streamState = this.streamStates.get(properties.sessionID);
454
- if (streamState) {
455
- this.streamStates.delete(properties.sessionID);
456
- }
457
- log.error({ sessionId: properties.sessionID, error: errorMessage }, 'Session error');
458
- const isGroup = chatId.startsWith('group_');
459
- const targetId = isGroup ? chatId.replace('group_', '') : chatId.replace('claw-', '');
460
- const conversationType = isGroup ? 3 : 1;
461
- // 发送错误消息(直接文本格式)
462
- const errorText = `AI 处理出错: ${errorMessage}`;
463
- await this.rongClient.sendMessage(targetId, errorText, conversationType);
464
- this.sessionManager.updateStatus(chatId, 'idle');
465
- }
466
- }
467
- //# sourceMappingURL=event-handler.js.map
1
+ function a0_0x5666(_0x4e7e47,_0x590636){_0x4e7e47=_0x4e7e47-0xf0;const _0x2b7940=a0_0x2b79();let _0x566691=_0x2b7940[_0x4e7e47];if(a0_0x5666['SouBnV']===undefined){var _0x45877b=function(_0x44faed){const _0x3bbd9e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x31f5fb='',_0x33791b='';for(let _0x493d21=0x0,_0x14241c,_0x2d86ff,_0x1d076f=0x0;_0x2d86ff=_0x44faed['charAt'](_0x1d076f++);~_0x2d86ff&&(_0x14241c=_0x493d21%0x4?_0x14241c*0x40+_0x2d86ff:_0x2d86ff,_0x493d21++%0x4)?_0x31f5fb+=String['fromCharCode'](0xff&_0x14241c>>(-0x2*_0x493d21&0x6)):0x0){_0x2d86ff=_0x3bbd9e['indexOf'](_0x2d86ff);}for(let _0xe52570=0x0,_0x2c0c3d=_0x31f5fb['length'];_0xe52570<_0x2c0c3d;_0xe52570++){_0x33791b+='%'+('00'+_0x31f5fb['charCodeAt'](_0xe52570)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x33791b);};a0_0x5666['mhPCQS']=_0x45877b,a0_0x5666['spQqLK']={},a0_0x5666['SouBnV']=!![];}const _0x4d312e=_0x2b7940[0x0],_0x14f9af=_0x4e7e47+_0x4d312e,_0x4d67cd=a0_0x5666['spQqLK'][_0x14f9af];return!_0x4d67cd?(_0x566691=a0_0x5666['mhPCQS'](_0x566691),a0_0x5666['spQqLK'][_0x14f9af]=_0x566691):_0x566691=_0x4d67cd,_0x566691;}const a0_0x54df74=a0_0x5666;(function(_0x51e113,_0x354638){const _0x424983=a0_0x5666,_0x262569=_0x51e113();while(!![]){try{const _0x2149f7=-parseInt(_0x424983(0x14a))/0x1*(parseInt(_0x424983(0x15e))/0x2)+-parseInt(_0x424983(0x1cc))/0x3*(-parseInt(_0x424983(0xfe))/0x4)+parseInt(_0x424983(0x13f))/0x5*(parseInt(_0x424983(0x162))/0x6)+-parseInt(_0x424983(0x1b0))/0x7+-parseInt(_0x424983(0xf4))/0x8*(-parseInt(_0x424983(0x15f))/0x9)+parseInt(_0x424983(0x1c6))/0xa+parseInt(_0x424983(0x118))/0xb*(-parseInt(_0x424983(0x137))/0xc);if(_0x2149f7===_0x354638)break;else _0x262569['push'](_0x262569['shift']());}catch(_0x313cc8){_0x262569['push'](_0x262569['shift']());}}}(a0_0x2b79,0xe0a92));function a0_0x2b79(){const _0x25691a=['zMv0y2Hmyxn0twvZC2fNzvrLEhq','Be55s3O','C3rYAw5N','A1rzzxm','q2zju3O','C2vZC2LVBK1HBMfNzxi','qvzArNO','tgnlDuK','rMXXsvy','Chb3qwS','rLncuNq','C3rYzwfT','tMnzwwC','C3rHCNrZv2L0Aa','ve14reK','u05mquq','tM1uyLC','u3rYzwfTigrLBhrHihnLBNq','z1nHvui','DhLWzq','y29UzMLN','AwXWv1G','z2v0q2HHDeLKqNLtzxnZAw9U','nZi4odeXnMn1AgXMCa','uhDzCvu','C2vUzfn0CMvHBuDYB3vW','ExbVqLe','y29NreS','q2XLyxjLzcbZzw50igzSywCGzM9Yig5LDYbTzxnZywDLihr1CM4','A0LeDge','AgfZ','C2v0','sfLxtum','s2v2DMq','B0Phr1a','zg5ssMy','tM8Gy2HHDeLKigzVDw5KigzVCIbZzxnZAw9U','zMLUza','yxbWs2v5','zMHez0m','D3nyr2y','AxnsDw5UAw5N','zM1oBK4','rgHpuvq','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNvWzgf0zwq','v2TTrvy','u3rYzwfTigHPC3rVCNKGC2vUDa','zxH0CMe','C2vUzfn0CMvHBvbYAxzHDgu','C2vYDMLJzvrHCMDLDeLK','s2XnBuy','z2v0u2vZC2LVBG','rhHPs3C','D3bdqve','mJr3uwjhtwG','BgvUz3rO','ChjVCgvYDgLLCW','BgfZDenVBNrLBNq','AgfUzgXLtwvZC2fNzvbHCNrezwX0ysbJywXSzwq','vwPJDg0','rMv0y2HLzcbSyxn0ig1LC3nHz2u','zxjYB3i','nvDvvevgvG','ANbxBgC','C2vUze1LC3nHz2u','CMvZB2X2zq','quKG5Ase55cg5AsX6lsL77Ym6k+356In5zco6yEn6k+v','zgXjuvC','BeTyu3a','ve5Qs04','tevwyxC','DM9OrwS','C3rHDhvZ','nZCZsvbytgHz','sgfUzgXPBMCGC2vZC2LVBIbPzgXLicHUBYbZDhjLyw0P','r1bWCwK','C3rYzwfTuxvLDwu','zhz4ruC','Ewj0v2C','rxzLBNriyw5KBgvY','u3rYzwfTigrLBhrHihnLBMqGzMfPBgvK','CvLYBgm','CMztqKq','u3rYzwfTAw5NihnRAxbWzwq6igfWCfnLy3jLDcbUB3qGy29UzMLNDxjLzcWGzMfSBgLUzYbIywnRihrVihnLC3nPB24UAwrSzsbYzxbSEq','BwvZC2fNzs5Wyxj0lMrLBhrH','u2vUzgLUzYbYzxbSEsb2AweGBM9YBwfSig1LC3nHz2u','tKTxvei','v2HKBhK','zKfRt0e','wvjqBfy','Cgf5Bg9Hza','u3rYzwfTihnLBMqGzMfPBgvK','u2vUzgLUzYbZDhjLyw0Gy2H1BMSGkgzYB20GCgfYDc51CgrHDgvKkq','ndq5mLzMBxLdyW','nJy4nZyZALHpv1HX','zNvSBenVBNrLBNq','nNWYFdH8mxW0Fdn8n3WWFdu','nZyXmdi4nNH0ruPhyq','u1f4v24','z1nvEuy','DfnvC1K','AwrSzq','A0XPy2W','u3rYzwfTAw5NihnRAxbWzwq6igfWCfnLy3jLDcbUB3qGy29UzMLNDxjLza','C2vZC2LVBI5LCNjVCG','t0TOtgS','BNfHsgC','u2vZC2LVBIbLCNjVCG','rxzLBNqGAgfUzgXLCIbZDgfYDgvK','DgPXzMu','u3rYzwfTihbYB2nLC3nPBMCGzMfPBgvK','C2vUDfnLC3nPB25Z','C2XPy2u','yNvZEq','svDnq2S','CMvWBgfJzq','tNrLyxi','z2v0rNjVBvvZzxjjza','y1fxCfK','D2TWBvC','D29wvg4','zgvSzxrL','BgfZDfnLBNruAw1L','s0vUuu8','rKPYzg0','AgfUzgXLu3rHDhvZq2HHBMDL','DgHLBG','yLbpzuW','C3rYzwfTu3rHDgvZ','vKDjy3O','AgfUzgXLrxjYB3i','CgfYDhm','reDkzNK','reDgqui','y0zTqwq','C2vZC2LVBI5ZDgf0Dxm','AgfUzgXLrxzLBNq','Bw9KzwW','AgfUzgXLtwvZC2fNzvbHCNrezwX0yq','C3rYAw5NAwz5','u2vZC2LVBIbHBhjLywr5ihnLBNqSihnRAxbWAw5Nihn0CMvHBsbKzwX0yq','yLHxuxq','zgvIDwC','BeXqq3e','DgfYz2v0swq','B1Ppt0q','C2vZC2LVBKLe','Dur5wfC','C3rYzwfTqvbj','DLzAqvy','C2vYDMLJzs0','z3jVDxbF','EuTmzuG','BwvZC2fNzvvjra','sKP1yNa','Buntz0C','AgfUzgXLu2vZC2LVBKLKBgu','C3rVCa','u1rzAMm','tLDbqMW','z2v0','u3rYzwfTigfSCMvHzhKGywn0AxzLihzPysbKzwX0ysWGAwDUB3jPBMCGCgfYDc51CgrHDgvK','DhjPBq','AxnhCM91Ca','quKG5Ase55cg5yE66zszoIa','BKn3uMu','zNbOugW','v2zqrMq','BeHwAKm','ANPTshO','ruTyDLO','AunOsKW','C2vZC2LVBI5PzgXL','AgXIy1u','r29czw0','otmXmti2ueXNy3Pe','AgfUzgXLtwvZC2fNzvvWzgf0zwq','CM9Uz0nSAwvUDa','y2XHDY0','u2vZC2LVBIbPzgXLigv2zw50','CM9Szq','yxnZAxn0yw50','C2vYDMLJzv9JAgf0x3jLC3bVBNnL','rxzXCfC','Dgv4Da','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNbHCNqUDxbKyxrLza','Aw5MBW','D2fYBG','zgf0yq','tw1hDxe','CurPAgK','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNbHCNqUzgvSDge','C3vJy2vZCW','rxjYB3iGAgfUzgXPBMCGzxzLBNq','zgvSDge','ywrK','tgztwMu','nZq1mJiZmffgEurSvG','C2vX','C3bSAxq','zND5zMC','u3rYzwfTigXHC3qGy2H1BMSGC2vUDa','AgfZu2vUDfn0CMvHBq','mJu1reT6t3fp','DxbKyxrLu3rHDhvZ','rg5hyK0','y2HHDeLK','AgfUzgXLtwvZC2fNzvbHCNrvCgrHDgvK','BM93','z2zbB2G','DeH4vfa','C3rHCNq','zhr3thK','wenlu3O','rMfPBgvKihrVihnLBMqGC3rYzwfTigXHC3qGy2H1BMS','ntzHzeH2EgW','CgfYDa','rMfPBgvKihrVihnLBMqGC3rYzwfTigHPC3rVCNK','rejbz1q','z2PqzNy','u1nfigv2zw50ihjLy2vPDMvK','rMDru2m','quKGCMvZCg9UC2uGy29UDgvUDcb1CgrHDgvK','BLrLB1C','BwvZC2fNzs5Wyxj0lNvWzgf0zwq','nZqZodHrzgPWrxC','BwvZC2fNzq','yxbWu2vJCMv0'];a0_0x2b79=function(){return _0x25691a;};return a0_0x2b79();}import{createLogger}from'../core/logger.js';import{RongCloudServerAPI}from'../rongcloud/server-api.js';const log=createLogger(a0_0x54df74(0x150));export class EventHandler{constructor(_0x401703,_0x4fd72,_0x33a92d,_0x48fc0c){const _0x5a9880=a0_0x54df74,_0x38983f=_0x5a9880(0x161)[_0x5a9880(0x1c8)]('|');let _0x1f9abc=0x0;while(!![]){switch(_0x38983f[_0x1f9abc++]){case'0':this['config']=_0x48fc0c;continue;case'1':this[_0x5a9880(0x14d)]=Promise[_0x5a9880(0x142)]();continue;case'2':this[_0x5a9880(0x170)]=new Set();continue;case'3':this[_0x5a9880(0x1b2)]=_0x4fd72;continue;case'4':this['sessionManager']=_0x401703;continue;case'5':this[_0x5a9880(0x195)]=new RongCloudServerAPI(_0x48fc0c[_0x5a9880(0x127)],_0x48fc0c[_0x5a9880(0x100)]||'');continue;case'6':this[_0x5a9880(0x12a)]=![];continue;case'7':this['opencode']=_0x33a92d;continue;case'8':this[_0x5a9880(0x181)]=new Map();continue;}break;}}async[a0_0x54df74(0xf0)](_0x577297){const _0x2149a0=a0_0x54df74,_0x44c3f8={'Bgjpk':_0x2149a0(0xfb),'EvqpW':_0x2149a0(0x16d),'ppwAk':_0x2149a0(0x18e),'fwcjC':'SSE\x20stream\x20error'};if(this[_0x2149a0(0x12a)])return;this[_0x2149a0(0x12a)]=!![],log[_0x2149a0(0x1bb)](_0x44c3f8[_0x2149a0(0x1b8)]);try{if('bXWQt'===_0x44c3f8[_0x2149a0(0x10a)])for await(const _0x5a3d73 of _0x577297[_0x2149a0(0x10c)]){if(!this['isRunning'])break;await this[_0x2149a0(0x189)](_0x5a3d73);}else{if(_0x20c241[_0x2149a0(0x184)]&&_0x21d4bc[_0x2149a0(0x184)][_0x2149a0(0x138)]>0x0){const _0x3651a7=_0x4350dc[_0x2149a0(0x184)][_0x2149a0(0x126)](_0x165cb5=>_0x165cb5[_0x2149a0(0x114)]===_0x2149a0(0x1b9));_0x3651a7?.[_0x2149a0(0x1b9)]&&_0x15a528[_0x2149a0(0x18f)]({'sessionId':_0x24b5f2,'textLength':_0x3651a7[_0x2149a0(0x1b9)][_0x2149a0(0x138)]},_0x44c3f8['Bgjpk']);}}}catch(_0x7f97d){log[_0x2149a0(0x13e)]({'err':_0x7f97d},_0x44c3f8['fwcjC']);}finally{this[_0x2149a0(0x12a)]=![];}}[a0_0x54df74(0x19e)](){const _0x2cd27c=a0_0x54df74;this[_0x2cd27c(0x12a)]=![];}[a0_0x54df74(0x176)](_0x2275fa){const _0x2bc948=a0_0x54df74,_0x534e60=this[_0x2bc948(0x106)]['getChatIdBySession'](_0x2275fa);if(_0x534e60){const _0x124920=this[_0x2bc948(0x106)][_0x2bc948(0x134)](_0x534e60);if(_0x124920?.[_0x2bc948(0x130)]?.['serviceTargetId'])return _0x124920['extra'][_0x2bc948(0x132)];}return this['config']['accountId'];}async[a0_0x54df74(0x189)](_0x365ac4){const _0x55cc23=a0_0x54df74,_0x301e82={'tSUsY':'AI\x20response\x20content\x20updated','jpWlg':_0x55cc23(0xf9),'FJrdm':_0x55cc23(0x1b4),'qYrlc':_0x55cc23(0xfd),'SQxWn':'message.updated','YOSYn':'Message\x20updated\x20event','cFmAd':_0x55cc23(0x188),'kTYes':_0x55cc23(0x169),'EKXvZ':'Unhandled\x20event\x20type','gjPfv':function(_0x2e1edb,_0x303079){return _0x2e1edb!==_0x303079;},'lKXSp':_0x55cc23(0xf1)};try{const _0x2b266a=_0x365ac4[_0x55cc23(0x15b)]||_0x365ac4,_0x882ea3=_0x2b266a[_0x55cc23(0x139)]||_0x2b266a;log[_0x55cc23(0x1bb)]({'type':_0x2b266a[_0x55cc23(0x114)],'hasProperties':!!_0x2b266a[_0x55cc23(0x139)]},_0x301e82[_0x55cc23(0x140)]);switch(_0x2b266a[_0x55cc23(0x114)]){case _0x55cc23(0x1ad):log['info']({'sessionId':_0x882ea3[_0x55cc23(0x193)]},_0x301e82[_0x55cc23(0x17d)]),await this[_0x55cc23(0x19d)](_0x882ea3);break;case _0x55cc23(0x155):await this[_0x55cc23(0x18b)](_0x882ea3);break;case _0x301e82[_0x55cc23(0x152)]:log[_0x55cc23(0x1bb)]({'sessionId':_0x882ea3[_0x55cc23(0x193)]},'Message\x20part\x20updated\x20event'),await this[_0x55cc23(0x1d0)](_0x882ea3);break;case _0x301e82[_0x55cc23(0x163)]:log[_0x55cc23(0x1bb)]({'sessionId':_0x882ea3['sessionID'],'messageKeys':Object['keys'](_0x882ea3[_0x55cc23(0xff)]||{})},_0x301e82['YOSYn']),await this[_0x55cc23(0x1b1)](_0x882ea3);break;case _0x301e82[_0x55cc23(0x187)]:this[_0x55cc23(0x17e)](_0x882ea3);break;case _0x301e82[_0x55cc23(0x104)]:await this[_0x55cc23(0x183)](_0x882ea3);break;default:log[_0x55cc23(0x18f)]({'type':_0x2b266a[_0x55cc23(0x114)]},_0x301e82[_0x55cc23(0x1ab)]);}}catch(_0x1a5b84){if(_0x301e82[_0x55cc23(0xf8)](_0x301e82[_0x55cc23(0x145)],_0x55cc23(0xf1))){const _0x2a4794=_0x3f2d11[_0x55cc23(0x184)][_0x55cc23(0x126)](_0x79bbe1=>_0x79bbe1[_0x55cc23(0x114)]==='text');_0x2a4794?.['text']&&_0x598b9e[_0x55cc23(0x18f)]({'sessionId':_0x1a1ecb,'textLength':_0x2a4794[_0x55cc23(0x1b9)][_0x55cc23(0x138)]},_0x301e82[_0x55cc23(0x165)]);}else log[_0x55cc23(0x13e)]({'err':_0x1a5b84},_0x55cc23(0x1c2));}}async[a0_0x54df74(0x18b)](_0x257d91){const _0x310239=a0_0x54df74,_0x550179={'AVZFz':_0x310239(0x11d),'SMHYH':'Session\x20already\x20sent,\x20skipping\x20stream','Ntear':function(_0x1757c5,_0x28ddd7){return _0x1757c5!==_0x28ddd7;},'IWMCk':_0x310239(0x129),'WkmEV':_0x310239(0x1d2),'bPOeL':function(_0xfb5e26,_0x48d18b){return _0xfb5e26===_0x48d18b;},'tHxTP':'Sending\x20stream\x20chunk\x20to\x20RongCloud','GPpqi':function(_0x375efd,_0x58cff7){return _0x375efd!==_0x58cff7;},'anord':_0x310239(0xfc),'EYfxK':function(_0x33a030,_0x560a91){return _0x33a030-_0x560a91;},'eKCzs':_0x310239(0x151),'wuXUW':_0x310239(0x13b),'GoBem':_0x310239(0x168),'woVTn':_0x310239(0x18d),'ypoBQ':function(_0x388567,_0x147545){return _0x388567!==_0x147545;},'YRPlV':'string','lLPCq':_0x310239(0x136),'Whdly':'mIRBf','dlIQW':_0x310239(0x1c0),'FlqIV':_0x310239(0x198),'kIDta':_0x310239(0x197),'FgQSc':'claw-','fwyfg':'Sending\x20stream\x20delta'},_0x5791a6=_0x257d91[_0x310239(0x193)];log[_0x310239(0x1bb)]({'sessionId':_0x5791a6,'hasDelta':!!_0x257d91[_0x310239(0x1c3)],'hasText':!!_0x257d91[_0x310239(0x1b9)],'hasPart':!!_0x257d91[_0x310239(0xf5)]},_0x550179['wuXUW']);if(!this[_0x310239(0x115)][_0x310239(0x100)]){log[_0x310239(0x1bc)]({'sessionId':_0x5791a6},_0x550179[_0x310239(0x1af)]);return;}if(this[_0x310239(0x170)]['has'](_0x5791a6)){log['warn']({'sessionId':_0x5791a6},_0x550179[_0x310239(0x179)]);return;}const _0x403db2=_0x257d91[_0x310239(0x1c3)]||_0x257d91[_0x310239(0x1b9)]||_0x257d91[_0x310239(0xf5)]?.[_0x310239(0x1c3)]||_0x257d91[_0x310239(0xf5)]?.['text']||'';if(_0x550179[_0x310239(0x11b)](typeof _0x403db2,_0x550179[_0x310239(0x15a)])){if(_0x550179['bPOeL'](_0x550179[_0x310239(0x190)],_0x550179[_0x310239(0x158)]))this['streamStates'][_0x310239(0x17a)](_0xb9bd27);else return;}let _0x537dc2=this[_0x310239(0x181)][_0x310239(0x1a1)](_0x5791a6);if(!_0x537dc2){const _0x4a772a=this[_0x310239(0x106)]['getChatIdBySession'](_0x5791a6);if(!_0x4a772a){log[_0x310239(0x1bc)]({'sessionId':_0x5791a6},_0x550179[_0x310239(0x144)]);return;}_0x537dc2={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':Date[_0x310239(0x1d1)](),'fullContent':'','hasSentStream':![],'chatId':_0x4a772a,'targetId':_0x4a772a[_0x310239(0x10e)](_0x310239(0x198))?_0x4a772a['replace'](_0x550179[_0x310239(0x109)],''):_0x4a772a[_0x310239(0x10e)](_0x310239(0x197))?_0x4a772a[_0x310239(0x174)](_0x550179[_0x310239(0x11e)],''):_0x4a772a[_0x310239(0x174)](_0x550179[_0x310239(0xfa)],''),'isGroup':_0x4a772a[_0x310239(0x10e)](_0x310239(0x198))},this[_0x310239(0x181)][_0x310239(0x120)](_0x5791a6,_0x537dc2);}_0x537dc2[_0x310239(0x160)]+=_0x403db2,log['info']({'sessionId':_0x5791a6,'seq':_0x537dc2[_0x310239(0x1c7)],'deltaLength':_0x403db2[_0x310239(0x138)]},_0x550179[_0x310239(0x1c9)]),this[_0x310239(0x14d)]=this[_0x310239(0x14d)][_0x310239(0x17f)](async()=>{const _0x119275=_0x310239,_0x5445cc={'FWhWC':_0x550179['SMHYH']};try{if(_0x550179[_0x119275(0x175)](_0x550179[_0x119275(0x173)],_0x550179[_0x119275(0x12e)])){const _0x2b0d96=_0x550179[_0x119275(0x180)](_0x537dc2['seq'],0x1);log[_0x119275(0x1bb)]({'sessionId':_0x5791a6,'seq':_0x537dc2[_0x119275(0x1c7)],'isFirstChunk':_0x2b0d96,'targetId':_0x537dc2[_0x119275(0x191)],'deltaLength':_0x403db2[_0x119275(0x138)]},_0x550179[_0x119275(0x1d3)]);if(_0x537dc2[_0x119275(0x1a4)]){if(_0x550179[_0x119275(0x14c)](_0x119275(0xfc),_0x550179['anord'])){_0x5ad5c6[_0x119275(0x18f)]({'sessionId':_0x2d017c},_0x5445cc['FWhWC']);return;}else{const _0x1a28b9=await this[_0x119275(0x195)]['sendStreamGroup']({'fromUserId':this['getFromUserId'](_0x5791a6),'toGroupId':_0x537dc2[_0x119275(0x191)],'content':_0x403db2,'isFirstChunk':_0x2b0d96,'isLastChunk':![],'seq':_0x537dc2['seq'],'messageUID':_0x537dc2[_0x119275(0x19a)]||null});if(_0x1a28b9['messageUID'])_0x537dc2[_0x119275(0x19a)]=_0x1a28b9[_0x119275(0x19a)];}}else{const _0x575e29=await this['streamAPI'][_0x119275(0x131)]({'fromUserId':this[_0x119275(0x176)](_0x5791a6),'toUserId':_0x537dc2['targetId'],'content':_0x403db2,'isFirstChunk':_0x2b0d96,'isLastChunk':![],'seq':_0x537dc2['seq'],'messageUID':_0x537dc2[_0x119275(0x19a)]||null});if(_0x575e29[_0x119275(0x19a)])_0x537dc2[_0x119275(0x19a)]=_0x575e29[_0x119275(0x19a)];}_0x537dc2[_0x119275(0x1c7)]++,_0x537dc2[_0x119275(0x1cb)]=!![],_0x537dc2['lastSentTime']=Date[_0x119275(0x1d1)](),log['info']({'sessionId':_0x5791a6,'seq':_0x550179['EYfxK'](_0x537dc2[_0x119275(0x1c7)],0x1)},_0x119275(0x112));}else this[_0x119275(0x106)][_0x119275(0x1cd)](_0x3d311c,_0x119275(0x172)),this[_0x119275(0x170)][_0x119275(0x17a)](_0xdf3825[_0x119275(0x193)])&&_0x53d162['debug']({'sessionId':_0x280799[_0x119275(0x193)]},_0x550179[_0x119275(0x107)]);}catch(_0xeed4a5){log[_0x119275(0x13e)]({'err':_0xeed4a5,'sessionId':_0x5791a6,'delta':_0x403db2['substring'](0x0,0x32)},_0x550179['eKCzs']);}}),await this[_0x310239(0x14d)];}async[a0_0x54df74(0x19d)](_0x4244bb){const _0x14b431=a0_0x54df74,_0x14999f={'uDyXW':function(_0x229c5f,_0x5afd70){return _0x229c5f!==_0x5afd70;},'FSBRt':_0x14b431(0x146),'WfPFd':_0x14b431(0x123),'KAnBU':_0x14b431(0x1ca),'PwYqU':_0x14b431(0xf3),'vVZAV':'Already\x20sent\x20reply\x20for\x20this\x20session,\x20skipping','Ujctm':_0x14b431(0x12f),'MmGuq':_0x14b431(0xf6),'cQWpY':_0x14b431(0x1ae),'cogDK':_0x14b431(0x125),'NcYYg':_0x14b431(0x198),'iChJL':_0x14b431(0x197),'fhDgC':_0x14b431(0x156),'DGFAB':_0x14b431(0x1b7),'DGJfy':_0x14b431(0x159),'dnRJf':'idle'},_0x3fbee9=_0x4244bb[_0x14b431(0x193)];if(this[_0x14b431(0x170)]['has'](_0x3fbee9)){log[_0x14b431(0x18f)]({'sessionId':_0x3fbee9},_0x14999f['vVZAV']);return;}this['sentSessions'][_0x14b431(0x1c4)](_0x3fbee9);const _0x3204a9=this[_0x14b431(0x181)][_0x14b431(0x1a1)](_0x3fbee9);if(_0x3204a9&&_0x3204a9[_0x14b431(0x1cb)]){log[_0x14b431(0x1bb)]({'sessionId':_0x3fbee9,'streamSeq':_0x3204a9[_0x14b431(0x1c7)]},'Finishing\x20stream\x20with\x20last\x20chunk'),this[_0x14b431(0x14d)]=this[_0x14b431(0x14d)][_0x14b431(0x17f)](async()=>{const _0x295640=_0x14b431;if(_0x14999f[_0x295640(0x194)](_0x14999f[_0x295640(0x10b)],_0x14999f[_0x295640(0x1a8)]))try{_0x3204a9['isGroup']?await this[_0x295640(0x195)][_0x295640(0x11a)]({'fromUserId':this[_0x295640(0x176)](_0x3fbee9),'toGroupId':_0x3204a9[_0x295640(0x191)],'content':'','isFirstChunk':![],'isLastChunk':!![],'seq':_0x3204a9[_0x295640(0x1c7)],'messageUID':_0x3204a9[_0x295640(0x19a)]||null}):await this[_0x295640(0x195)][_0x295640(0x131)]({'fromUserId':this[_0x295640(0x176)](_0x3fbee9),'toUserId':_0x3204a9['targetId'],'content':'','isFirstChunk':![],'isLastChunk':!![],'seq':_0x3204a9[_0x295640(0x1c7)],'messageUID':_0x3204a9[_0x295640(0x19a)]||null}),log[_0x295640(0x1bb)]({'sessionId':_0x3fbee9,'seq':_0x3204a9[_0x295640(0x1c7)]},_0x14999f['KAnBU']);}catch(_0x132a13){log[_0x295640(0x13e)]({'err':_0x132a13,'sessionId':_0x3fbee9},_0x14999f[_0x295640(0x119)]);}else{_0x45eb7d[_0x295640(0x1bc)]({'sessionId':_0x409648},_0x295640(0x12d));return;}}),await this[_0x14b431(0x14d)];if(_0x3204a9[_0x14b431(0x160)][_0x14b431(0x1a3)]())try{const _0x4deeed=JSON[_0x14b431(0x18c)]({'__stream_history__':!![],'streamId':_0x3204a9[_0x14b431(0x19a)]||_0x3fbee9,'text':_0x3204a9[_0x14b431(0x160)],'sentTime':Date[_0x14b431(0x1d1)]()});await this[_0x14b431(0x1b2)][_0x14b431(0x141)](_0x3204a9['targetId'],_0x4deeed,_0x3204a9[_0x14b431(0x1a4)]?0x3:0x1),log[_0x14b431(0x1bb)]({'sessionId':_0x3fbee9,'textLength':_0x3204a9[_0x14b431(0x160)][_0x14b431(0x138)]},_0x14999f[_0x14b431(0x13c)]);}catch(_0x29f219){log[_0x14b431(0x13e)]({'err':_0x29f219,'sessionId':_0x3fbee9},_0x14999f[_0x14b431(0x1be)]);}this[_0x14b431(0x181)][_0x14b431(0x17a)](_0x3fbee9),this[_0x14b431(0x106)][_0x14b431(0x1cd)](_0x3204a9[_0x14b431(0x1cf)],_0x14b431(0x166));return;}if(_0x3204a9){if(_0x14b431(0x1ae)!==_0x14999f[_0x14b431(0x177)]){_0xcf6e22[_0x14b431(0x18f)]({'sessionId':_0x4d0a94},_0x14999f[_0x14b431(0x196)]);return;}else this[_0x14b431(0x181)][_0x14b431(0x17a)](_0x3fbee9);}log['info']({'sessionId':_0x3fbee9},_0x14b431(0x14b));const _0x19fb00=this[_0x14b431(0x106)]['getChatIdBySession'](_0x3fbee9);if(!_0x19fb00){log['warn']({'sessionId':_0x3fbee9},_0x14999f[_0x14b431(0x11c)]);return;}const _0x59b2b5=await this['opencode'][_0x14b431(0x101)](_0x3fbee9);log[_0x14b431(0x1bb)]({'sessionId':_0x3fbee9,'chatId':_0x19fb00,'hasText':!!_0x59b2b5},_0x14b431(0x13d));if(_0x59b2b5){const _0x5b3c20=_0x19fb00[_0x14b431(0x10e)](_0x14999f['NcYYg']),_0x1b353a=_0x19fb00[_0x14b431(0x10e)](_0x14999f[_0x14b431(0x1ac)]),_0x88891b=_0x5b3c20?_0x19fb00['replace'](_0x14999f[_0x14b431(0x10d)],''):_0x1b353a?_0x19fb00[_0x14b431(0x174)](_0x14999f[_0x14b431(0x1ac)],''):_0x19fb00[_0x14b431(0x174)]('claw-',''),_0x564e11=_0x5b3c20?0x3:0x1;log['info']({'targetId':_0x88891b,'textLength':_0x59b2b5['length'],'isGroup':_0x5b3c20,'isServiceChat':_0x1b353a},_0x14999f[_0x14b431(0x128)]);if(_0x1b353a){const _0x57a807=JSON[_0x14b431(0x18c)]({'msg_type':_0x14999f[_0x14b431(0x186)],'content':_0x59b2b5,'sessionId':_0x3fbee9,'userId':_0x88891b,'status':_0x14b431(0x1c1),'timestamp':Math['floor'](Date[_0x14b431(0x1d1)]()/0x3e8)});await this[_0x14b431(0x1b2)][_0x14b431(0x141)](_0x88891b,_0x57a807,_0x564e11);}else _0x14999f[_0x14b431(0x185)]!=='fAkOA'?_0xcd77c[_0x14b431(0x13e)]({'err':_0x29ad39,'sessionId':_0x431878},_0x14999f[_0x14b431(0x119)]):await this[_0x14b431(0x1b2)][_0x14b431(0x141)](_0x88891b,_0x59b2b5,_0x564e11);}this['sessionManager'][_0x14b431(0x1cd)](_0x19fb00,_0x14999f[_0x14b431(0x124)]);}async[a0_0x54df74(0x1d0)](_0x2038f1){const _0x5d4871=a0_0x54df74,_0x5541ce={'CfISz':_0x5d4871(0x1c0),'oZOOD':'group_','TMxDI':'service-','fphPl':_0x5d4871(0x1b3),'NWABl':function(_0x5255af,_0x334d6d){return _0x5255af!==_0x334d6d;},'XCKSz':_0x5d4871(0x110),'DhOQT':_0x5d4871(0x1a9),'ilpWX':_0x5d4871(0x1c5),'DnGbM':'ZlAOU','NmTbW':function(_0x30e3b0,_0x5edbc2){return _0x30e3b0===_0x5edbc2;},'wkpmW':function(_0x10fc1e,_0x3a12e2){return _0x10fc1e===_0x3a12e2;},'OKhLk':_0x5d4871(0x14f),'LEVaw':_0x5d4871(0x15c),'VdQEK':_0x5d4871(0x1a2),'vDuHD':_0x5d4871(0x154),'gSaUB':_0x5d4871(0x1ba),'LcKuI':'Session\x20already\x20sent,\x20skipping\x20stream','DxiKw':_0x5d4871(0xf7),'HYWMC':_0x5d4871(0x17c)},_0x2e0345=_0x2038f1[_0x5d4871(0x193)];if(this[_0x5d4871(0x181)][_0x5d4871(0x11f)](_0x2e0345)){log[_0x5d4871(0x18f)]({'sessionId':_0x2e0345},_0x5541ce['VdQEK']);return;}if(!this[_0x5d4871(0x115)][_0x5d4871(0x100)]){log[_0x5d4871(0x18f)]({'sessionId':_0x2e0345},_0x5541ce['vDuHD']);return;}const _0x384965=this['sessionManager'][_0x5d4871(0x117)](_0x2e0345);if(!_0x384965){log[_0x5d4871(0x1bc)]({'sessionId':_0x2e0345},_0x5541ce[_0x5d4871(0x113)]);return;}if(this['sentSessions'][_0x5d4871(0x11f)](_0x2e0345)){log['debug']({'sessionId':_0x2e0345},_0x5541ce[_0x5d4871(0x108)]);return;}const _0x46583d=_0x384965[_0x5d4871(0x10e)](_0x5541ce[_0x5d4871(0x192)]),_0xf6013e=_0x46583d?_0x384965[_0x5d4871(0x174)](_0x5541ce[_0x5d4871(0x192)],''):_0x384965['startsWith'](_0x5541ce[_0x5d4871(0x10f)])?_0x384965[_0x5d4871(0x174)](_0x5541ce[_0x5d4871(0x10f)],''):_0x384965[_0x5d4871(0x174)](_0x5541ce[_0x5d4871(0x1a7)],'');try{if(_0x5541ce[_0x5d4871(0x135)]===_0x5541ce[_0x5d4871(0x121)]){const _0x1181ec=this['sessionManager'][_0x5d4871(0x117)](_0x1cf7c2);if(!_0x1181ec){_0x382b13[_0x5d4871(0x1bc)]({'sessionId':_0x3f783a},Uakhkt[_0x5d4871(0x105)]);return;}_0x3cd26c={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':_0x5c76e3[_0x5d4871(0x1d1)](),'fullContent':'','hasSentStream':![],'chatId':_0x1181ec,'targetId':_0x1181ec[_0x5d4871(0x10e)](Uakhkt[_0x5d4871(0x192)])?_0x1181ec[_0x5d4871(0x174)](Uakhkt[_0x5d4871(0x192)],''):_0x1181ec['startsWith'](Uakhkt['TMxDI'])?_0x1181ec[_0x5d4871(0x174)](Uakhkt['TMxDI'],''):_0x1181ec[_0x5d4871(0x174)](Uakhkt[_0x5d4871(0x1a7)],''),'isGroup':_0x1181ec[_0x5d4871(0x10e)](Uakhkt[_0x5d4871(0x192)])},this[_0x5d4871(0x181)][_0x5d4871(0x120)](_0x620ece,_0x5997dc);}else{const _0x37f55d=await this['opencode'][_0x5d4871(0x101)](_0x2e0345);if(!_0x37f55d)return;let _0x4ece7a=this['streamStates']['get'](_0x2e0345);if(!_0x4ece7a){const _0x35d7d5=this['sessionManager'][_0x5d4871(0x117)](_0x2e0345);if(!_0x35d7d5){log[_0x5d4871(0x1bc)]({'sessionId':_0x2e0345},_0x5541ce['gSaUB']);return;}_0x4ece7a={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':Date['now'](),'fullContent':'','hasSentStream':![],'chatId':_0x35d7d5,'targetId':_0x35d7d5[_0x5d4871(0x10e)](_0x5541ce[_0x5d4871(0x192)])?_0x35d7d5[_0x5d4871(0x174)](_0x5d4871(0x198),''):_0x35d7d5[_0x5d4871(0x10e)](_0x5d4871(0x197))?_0x35d7d5['replace'](_0x5541ce[_0x5d4871(0x10f)],''):_0x35d7d5[_0x5d4871(0x174)](_0x5541ce[_0x5d4871(0x1a7)],''),'isGroup':_0x35d7d5[_0x5d4871(0x10e)](_0x5541ce[_0x5d4871(0x192)])},this[_0x5d4871(0x181)][_0x5d4871(0x120)](_0x2e0345,_0x4ece7a);}const _0x291ada=_0x37f55d[_0x5d4871(0x171)](_0x4ece7a[_0x5d4871(0x13a)][_0x5d4871(0x138)]);if(!_0x291ada)return;_0x4ece7a[_0x5d4871(0x160)]+=_0x291ada,log[_0x5d4871(0x1bb)]({'sessionId':_0x2e0345,'seq':_0x4ece7a[_0x5d4871(0x1c7)],'newLength':_0x291ada[_0x5d4871(0x138)]},_0x5d4871(0x15d)),this[_0x5d4871(0x14d)]=this[_0x5d4871(0x14d)][_0x5d4871(0x17f)](async()=>{const _0x15caf7=_0x5d4871;if(_0x5541ce[_0x15caf7(0x1a0)](_0x5541ce[_0x15caf7(0xf2)],_0x5541ce[_0x15caf7(0x12c)]))try{if(_0x5541ce[_0x15caf7(0x1a0)](_0x5541ce[_0x15caf7(0x116)],_0x5541ce[_0x15caf7(0x1ce)])){if(_0x46583d){const _0x32ae2d=await this[_0x15caf7(0x195)][_0x15caf7(0x11a)]({'fromUserId':this[_0x15caf7(0x176)](_0x2e0345),'toGroupId':_0xf6013e,'content':_0x291ada,'isFirstChunk':_0x5541ce[_0x15caf7(0x111)](_0x4ece7a[_0x15caf7(0x1c7)],0x1),'isLastChunk':![],'seq':_0x4ece7a[_0x15caf7(0x1c7)],'messageUID':_0x4ece7a[_0x15caf7(0x19a)]||null});if(_0x32ae2d['messageUID'])_0x4ece7a[_0x15caf7(0x19a)]=_0x32ae2d[_0x15caf7(0x19a)];}else{const _0x50e8a8=await this[_0x15caf7(0x195)][_0x15caf7(0x131)]({'fromUserId':this[_0x15caf7(0x176)](_0x2e0345),'toUserId':_0xf6013e,'content':_0x291ada,'isFirstChunk':_0x5541ce['NmTbW'](_0x4ece7a[_0x15caf7(0x1c7)],0x1),'isLastChunk':![],'seq':_0x4ece7a[_0x15caf7(0x1c7)],'messageUID':_0x4ece7a[_0x15caf7(0x19a)]||null});if(_0x50e8a8[_0x15caf7(0x19a)])_0x4ece7a['messageUID']=_0x50e8a8[_0x15caf7(0x19a)];}_0x4ece7a[_0x15caf7(0x1c7)]++,_0x4ece7a['hasSentStream']=!![],_0x4ece7a[_0x15caf7(0x13a)]=_0x37f55d,_0x4ece7a[_0x15caf7(0x17b)]=Date[_0x15caf7(0x1d1)]();}else return;}catch(_0x5b85e2){_0x5541ce[_0x15caf7(0x178)](_0x5541ce[_0x15caf7(0x16a)],'sBSxv')?this[_0x15caf7(0x12a)]=![]:(log['error']({'err':_0x5b85e2,'sessionId':_0x2e0345,'targetId':_0xf6013e},_0x5541ce[_0x15caf7(0x147)]),this[_0x15caf7(0x181)]['delete'](_0x2e0345));}else{_0x252430['warn']({'sessionId':_0x201711},_0x15caf7(0x168));return;}}),await this[_0x5d4871(0x14d)];}}catch(_0x46505c){log['error']({'err':_0x46505c,'sessionId':_0x2e0345,'targetId':_0xf6013e},_0x5d4871(0x16f)),this[_0x5d4871(0x181)]['delete'](_0x2e0345);}}async['handleMessageUpdated'](_0x1293ba){const _0x3bee47=a0_0x54df74,_0x5660ad={'NbJtP':function(_0x430fbb,_0x42d560){return _0x430fbb!==_0x42d560;},'vohEk':_0x3bee47(0x12b),'JJubp':_0x3bee47(0x157),'VGIcz':_0x3bee47(0x12d),'AipqE':_0x3bee47(0x172),'jzmHz':function(_0x59f064,_0x48efd0){return _0x59f064===_0x48efd0;},'yKLeH':function(_0x5ab28a,_0x7aa20c){return _0x5ab28a>_0x7aa20c;},'qDihi':'jOhyd','dvxEG':'AI\x20response\x20content\x20updated'},_0x453956=_0x1293ba[_0x3bee47(0x193)];if(this['streamStates']['has'](_0x453956)){if(_0x5660ad['NbJtP'](_0x5660ad[_0x3bee47(0x148)],_0x5660ad[_0x3bee47(0x19b)]))return;else{_0x39c14a['warn']({'sessionId':_0x1e4f5c},'Session\x20already\x20sent,\x20skipping\x20stream\x20delta');return;}}if(this['sentSessions'][_0x3bee47(0x11f)](_0x453956))return;const _0x1d2abe=this['sessionManager']['getChatIdBySession'](_0x453956);if(!_0x1d2abe){log[_0x3bee47(0x1bc)]({'sessionId':_0x453956},_0x5660ad[_0x3bee47(0x182)]);return;}const _0x3082fc=this[_0x3bee47(0x106)][_0x3bee47(0x134)](_0x1d2abe);if(!_0x3082fc||_0x5660ad['NbJtP'](_0x3082fc[_0x3bee47(0x149)],_0x5660ad['AipqE']))return;const _0x4d0a8f=_0x1293ba[_0x3bee47(0xff)];if(_0x4d0a8f){const _0x4fb92d=_0x4d0a8f[_0x3bee47(0x1bb)]?.[_0x3bee47(0x1b5)]||_0x4d0a8f['role'];if(_0x5660ad['jzmHz'](_0x4fb92d,_0x3bee47(0x1b6))||_0x5660ad[_0x3bee47(0x1aa)](_0x4fb92d,_0x3bee47(0x18a))){if(_0x4d0a8f[_0x3bee47(0x184)]&&_0x5660ad[_0x3bee47(0x199)](_0x4d0a8f[_0x3bee47(0x184)][_0x3bee47(0x138)],0x0)){if(_0x5660ad['NbJtP'](_0x5660ad[_0x3bee47(0x1bf)],_0x5660ad[_0x3bee47(0x1bf)])){_0x3f43e4[_0x3bee47(0x1bc)]({'sessionId':_0x1f4498},'No\x20chatId\x20found\x20for\x20message.part.updated');return;}else{const _0x221143=_0x4d0a8f[_0x3bee47(0x184)][_0x3bee47(0x126)](_0x179c78=>_0x179c78[_0x3bee47(0x114)]===_0x3bee47(0x1b9));_0x221143?.['text']&&log[_0x3bee47(0x18f)]({'sessionId':_0x453956,'textLength':_0x221143[_0x3bee47(0x1b9)][_0x3bee47(0x138)]},_0x5660ad[_0x3bee47(0x14e)]);}}}}}[a0_0x54df74(0x17e)](_0x31526b){const _0xe9e5dd=a0_0x54df74,_0x3f675b={'nqaHg':function(_0x356a59,_0x38ddbe){return _0x356a59===_0x38ddbe;},'gSUyF':_0xe9e5dd(0x172),'mCSgG':'Cleared\x20sent\x20flag\x20for\x20new\x20message\x20turn'},_0x58a395=this[_0xe9e5dd(0x106)][_0xe9e5dd(0x117)](_0x31526b[_0xe9e5dd(0x193)]);_0x58a395&&_0x3f675b[_0xe9e5dd(0x16b)](_0x31526b[_0xe9e5dd(0x149)][_0xe9e5dd(0x114)],_0x3f675b['gSUyF'])&&(this[_0xe9e5dd(0x106)]['updateStatus'](_0x58a395,_0x3f675b[_0xe9e5dd(0x164)]),this[_0xe9e5dd(0x170)][_0xe9e5dd(0x17a)](_0x31526b['sessionID'])&&log[_0xe9e5dd(0x18f)]({'sessionId':_0x31526b[_0xe9e5dd(0x193)]},_0x3f675b[_0xe9e5dd(0x19c)]));}async[a0_0x54df74(0x183)](_0x136edd){const _0x702664=a0_0x54df74,_0x5e95ff={'DUsUA':_0x702664(0x11d),'tjqfe':function(_0x3be246,_0x194141){return _0x3be246===_0x194141;},'lNyKz':_0x702664(0x103),'WvZyl':function(_0x48acee,_0x5c85c7){return _0x48acee!==_0x5c85c7;},'STYjc':'KlMmF','KcpNd':function(_0x40b6aa,_0x16749f){return _0x40b6aa!==_0x16749f;},'Kevvd':'aJZqx','kLicl':_0x702664(0x16c),'nCwRe':_0x702664(0x198),'rfSBD':'claw-','pascs':_0x702664(0x166)};if(!_0x136edd[_0x702664(0x193)])return;const _0x5dd1e7=this[_0x702664(0x106)]['getChatIdBySession'](_0x136edd[_0x702664(0x193)]);if(!_0x5dd1e7)return;let _0x16aa78;if(_0x5e95ff[_0x702664(0x16e)](typeof _0x136edd['error'],_0x5e95ff[_0x702664(0x102)]))_0x5e95ff['WvZyl'](_0x702664(0x133),_0x5e95ff[_0x702664(0x19f)])?_0x59778e['debug']({'sessionId':_0xf074cd[_0x702664(0x193)]},gLPXPw['DUsUA']):_0x16aa78=_0x136edd[_0x702664(0x13e)];else{if(_0x136edd[_0x702664(0x13e)]?.[_0x702664(0x1bd)]?.[_0x702664(0xff)])_0x16aa78=_0x136edd['error'][_0x702664(0x1bd)][_0x702664(0xff)];else{if(_0x136edd[_0x702664(0x13e)]?.[_0x702664(0xff)]){if(_0x5e95ff['KcpNd']('fnUko','pMLAa'))_0x16aa78=_0x136edd[_0x702664(0x13e)][_0x702664(0xff)];else{_0x117b6e['warn']({'sessionId':_0x2596d4},_0x702664(0x1ba));return;}}else _0x16aa78=_0x702664(0x143);}}this[_0x702664(0x170)][_0x702664(0x1c4)](_0x136edd[_0x702664(0x193)]);const _0x396cbd=this['streamStates'][_0x702664(0x1a1)](_0x136edd['sessionID']);_0x396cbd&&(_0x5e95ff['tjqfe'](_0x5e95ff[_0x702664(0x122)],_0x5e95ff[_0x702664(0x122)])?this['streamStates'][_0x702664(0x17a)](_0x136edd[_0x702664(0x193)]):this[_0x702664(0x12a)]=![]);log[_0x702664(0x13e)]({'sessionId':_0x136edd[_0x702664(0x193)],'error':_0x16aa78},_0x5e95ff[_0x702664(0x167)]);const _0x2a838d=_0x5dd1e7[_0x702664(0x10e)](_0x5e95ff[_0x702664(0x1a6)]),_0x3ecdca=_0x2a838d?_0x5dd1e7[_0x702664(0x174)](_0x5e95ff['nCwRe'],''):_0x5dd1e7['replace'](_0x5e95ff[_0x702664(0x153)],''),_0x2e1e29=_0x2a838d?0x3:0x1,_0x4817dc=_0x702664(0x1a5)+_0x16aa78;await this[_0x702664(0x1b2)]['sendMessage'](_0x3ecdca,_0x4817dc,_0x2e1e29),this['sessionManager']['updateStatus'](_0x5dd1e7,_0x5e95ff['pascs']);}}
package/dist/plugin.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  import type { Plugin } from './types/plugin.js';
2
2
  declare const ClawMessengerPlugin: Plugin;
3
3
  export default ClawMessengerPlugin;
4
- //# sourceMappingURL=plugin.d.ts.map