@ynhcj/xiaoyi-channel 0.0.83-next → 0.0.84-next
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.
|
@@ -97,6 +97,7 @@ async function downloadRemoteFile(url) {
|
|
|
97
97
|
*/
|
|
98
98
|
export function createSendFileToUserTool(ctx) {
|
|
99
99
|
const { config, sessionId, taskId, messageId } = ctx;
|
|
100
|
+
console.log(`[SEND-FILE-TO-USER] 🏭 CREATE: sessionId=${sessionId} taskId=${taskId}`);
|
|
100
101
|
return {
|
|
101
102
|
name: "send_file_to_user",
|
|
102
103
|
label: "Send File to User",
|
|
@@ -235,6 +236,7 @@ b. 操作超时时间为2分钟(120秒),请勿重复调用此工具,如
|
|
|
235
236
|
error: { code: 0 },
|
|
236
237
|
}),
|
|
237
238
|
};
|
|
239
|
+
console.log(`[SEND-FILE-TO-USER] 🚀 EXEC sending: sessionId=${sessionId} taskId=${taskId} fileName=${fileName}`);
|
|
238
240
|
// Send WebSocket message
|
|
239
241
|
await wsManager.sendMessage(sessionId, agentResponse);
|
|
240
242
|
console.log(`send ${fileName} file to user success`);
|
package/dist/src/websocket.js
CHANGED
|
@@ -113,7 +113,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
113
113
|
throw new Error("WebSocket not ready");
|
|
114
114
|
}
|
|
115
115
|
const messageStr = JSON.stringify(message);
|
|
116
|
-
|
|
116
|
+
this.log(`[WS-SEND] sessionId=${sessionId} taskId=${message.taskId} msgType=${message.msgType} len=${messageStr.length}`);
|
|
117
117
|
this.ws.send(messageStr);
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
@@ -299,9 +299,9 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
299
299
|
msgDetail: JSON.stringify({ agentId: this.config.agentId }),
|
|
300
300
|
};
|
|
301
301
|
const initMessageStr = JSON.stringify(initMessage);
|
|
302
|
-
|
|
302
|
+
this.log("[WS-SEND] Sending init message frame:", JSON.stringify(initMessage, null, 2));
|
|
303
303
|
this.ws.send(initMessageStr);
|
|
304
|
-
|
|
304
|
+
this.log(`[WS-SEND] Init message sent successfully, size: ${initMessageStr.length} bytes`);
|
|
305
305
|
// Mark as ready after init
|
|
306
306
|
this.state.ready = true;
|
|
307
307
|
this.emit("ready");
|
|
@@ -361,7 +361,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
361
361
|
handleMessage(data) {
|
|
362
362
|
try {
|
|
363
363
|
const messageStr = data.toString();
|
|
364
|
-
|
|
364
|
+
this.log(`[WS-RECV] Raw message frame, size: ${messageStr.length} characters`);
|
|
365
365
|
const parsed = JSON.parse(messageStr);
|
|
366
366
|
// 提取并打印消息内容(只显示 text,data 只打印提示)
|
|
367
367
|
const parts = parsed.params?.message?.parts;
|
|
@@ -387,7 +387,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
387
387
|
// 如果长度 > 8,显示前5个 + *** + 后5个
|
|
388
388
|
maskedText = `${textContents.slice(0, 5)}***${textContents.slice(-5)}`;
|
|
389
389
|
}
|
|
390
|
-
|
|
390
|
+
this.log("[WS-RECV] Text:", maskedText);
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
393
|
}
|
|
@@ -397,7 +397,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
397
397
|
// Extract sessionId from params
|
|
398
398
|
const sessionId = a2aRequest.params?.sessionId;
|
|
399
399
|
if (!sessionId) {
|
|
400
|
-
|
|
400
|
+
this.error("[XY] Message missing sessionId");
|
|
401
401
|
return;
|
|
402
402
|
}
|
|
403
403
|
// Check if message contains only data parts (tool results)
|
|
@@ -408,10 +408,10 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
408
408
|
for (const dataPart of dataParts) {
|
|
409
409
|
const events = dataPart.data?.events;
|
|
410
410
|
if (!Array.isArray(events)) {
|
|
411
|
-
|
|
411
|
+
this.log("[XY] dataPart.data.events is not an array, skipping");
|
|
412
412
|
continue;
|
|
413
413
|
}
|
|
414
|
-
|
|
414
|
+
this.log(`[XY] Processing ${events.length} events from data.events`);
|
|
415
415
|
for (const item of events) {
|
|
416
416
|
if (item.header?.name === "UploadExeResult" && item.payload?.intentName) {
|
|
417
417
|
const dataEvent = {
|
|
@@ -419,15 +419,15 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
419
419
|
outputs: item.payload.outputs || {},
|
|
420
420
|
status: "success",
|
|
421
421
|
};
|
|
422
|
-
|
|
422
|
+
this.log(`[XY] Emitting data-event, intentName: ${item.payload.intentName}, size: ${JSON.stringify(dataEvent).length} bytes`);
|
|
423
423
|
this.emit("data-event", dataEvent);
|
|
424
424
|
}
|
|
425
425
|
else if (item.header?.namespace === "ClawAgent" && item.header?.name === "InvokeJarvisGUIAgentResponse") {
|
|
426
|
-
|
|
426
|
+
this.log(`[XY] Emitting gui-agent-response, size: ${JSON.stringify(item).length} bytes`);
|
|
427
427
|
this.emit("gui-agent-response", item);
|
|
428
428
|
}
|
|
429
429
|
else if (item.header?.namespace === "Common" && item.header?.name === "Trigger") {
|
|
430
|
-
|
|
430
|
+
this.log("[XY] Trigger event detected, emitting trigger-event with context");
|
|
431
431
|
// 传递完整上下文:event、sessionId、taskId
|
|
432
432
|
this.emit("trigger-event", {
|
|
433
433
|
event: item,
|
|
@@ -436,13 +436,13 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
436
436
|
});
|
|
437
437
|
}
|
|
438
438
|
else if (item.header?.namespace === "AgentEvent" && item.header?.name === "ClawSelfEvolutionState") {
|
|
439
|
-
|
|
439
|
+
this.log("[XY] ClawSelfEvolutionState event detected, emitting self-evolution-event");
|
|
440
440
|
this.emit("self-evolution-event", {
|
|
441
441
|
event: item,
|
|
442
442
|
});
|
|
443
443
|
}
|
|
444
444
|
else if (item.header?.namespace === "AgentEvent" && item.header?.name === "ClawSelfEvolutionStateGet") {
|
|
445
|
-
|
|
445
|
+
this.log("[XY] ClawSelfEvolutionStateGet event detected, emitting self-evolution-state-get-event");
|
|
446
446
|
this.emit("self-evolution-state-get-event", {
|
|
447
447
|
event: item,
|
|
448
448
|
sessionId: sessionId,
|
|
@@ -451,7 +451,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
451
451
|
});
|
|
452
452
|
}
|
|
453
453
|
else if (item.header?.namespace === "LoginTokenEvent" && item.header?.name === "ClawAutoLogin") {
|
|
454
|
-
|
|
454
|
+
this.log("[XY] LoginTokenEvent.ClawAutoLogin detected, emitting login-token-event");
|
|
455
455
|
this.emit("login-token-event", {
|
|
456
456
|
event: item,
|
|
457
457
|
});
|
|
@@ -466,16 +466,16 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
466
466
|
}
|
|
467
467
|
// Wrapped format (InboundWebSocketMessage)
|
|
468
468
|
const inboundMsg = parsed;
|
|
469
|
-
|
|
469
|
+
this.log(`[XY] Message type: Wrapped, msgType: ${inboundMsg.msgType}`);
|
|
470
470
|
// Handle heartbeat responses
|
|
471
471
|
if (inboundMsg.msgType === "heartbeat") {
|
|
472
|
-
|
|
472
|
+
this.log("[XY] Received heartbeat response");
|
|
473
473
|
this.onHealthEvent?.();
|
|
474
474
|
return;
|
|
475
475
|
}
|
|
476
476
|
// Handle data messages
|
|
477
477
|
if (inboundMsg.msgType === "data") {
|
|
478
|
-
|
|
478
|
+
this.log("[XY] Processing data message");
|
|
479
479
|
try {
|
|
480
480
|
const a2aRequest = JSON.parse(inboundMsg.msgDetail);
|
|
481
481
|
const dataParts = a2aRequest.params?.message?.parts?.filter((p) => p.kind === "data");
|
|
@@ -483,10 +483,10 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
483
483
|
for (const dataPart of dataParts) {
|
|
484
484
|
const events = dataPart.data?.events;
|
|
485
485
|
if (!Array.isArray(events)) {
|
|
486
|
-
|
|
486
|
+
this.log("[XY] dataPart.data.events is not an array, skipping");
|
|
487
487
|
continue;
|
|
488
488
|
}
|
|
489
|
-
|
|
489
|
+
this.log(`[XY] Processing ${events.length} events from data.events`);
|
|
490
490
|
for (const item of events) {
|
|
491
491
|
if (item.header?.name === "UploadExeResult" && item.payload?.intentName) {
|
|
492
492
|
const dataEvent = {
|
|
@@ -494,15 +494,15 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
494
494
|
outputs: item.payload.outputs || {},
|
|
495
495
|
status: "success",
|
|
496
496
|
};
|
|
497
|
-
|
|
497
|
+
this.log(`[XY] Emitting data-event, intentName: ${item.payload.intentName}, size: ${JSON.stringify(dataEvent).length} bytes`);
|
|
498
498
|
this.emit("data-event", dataEvent);
|
|
499
499
|
}
|
|
500
500
|
else if (item.header?.namespace === "ClawAgent" && item.header?.name === "InvokeJarvisGUIAgentResponse") {
|
|
501
|
-
|
|
501
|
+
this.log(`[XY] Emitting gui-agent-response, size: ${JSON.stringify(item).length} bytes`);
|
|
502
502
|
this.emit("gui-agent-response", item);
|
|
503
503
|
}
|
|
504
504
|
else if (item.header?.namespace === "Common" && item.header?.name === "Trigger") {
|
|
505
|
-
|
|
505
|
+
this.log("[XY] Trigger event detected (wrapped format), emitting trigger-event with context");
|
|
506
506
|
// 传递完整上下文:event、sessionId、taskId
|
|
507
507
|
this.emit("trigger-event", {
|
|
508
508
|
event: item,
|
|
@@ -511,7 +511,7 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
511
511
|
});
|
|
512
512
|
}
|
|
513
513
|
else if (item.header?.namespace === "LoginTokenEvent" && item.header?.name === "ClawAutoLogin") {
|
|
514
|
-
|
|
514
|
+
this.log("[XY] LoginTokenEvent.ClawAutoLogin detected (wrapped format), emitting login-token-event");
|
|
515
515
|
this.emit("login-token-event", {
|
|
516
516
|
event: item,
|
|
517
517
|
});
|
|
@@ -521,28 +521,28 @@ export class XYWebSocketManager extends EventEmitter {
|
|
|
521
521
|
}
|
|
522
522
|
}
|
|
523
523
|
catch (error) {
|
|
524
|
-
|
|
524
|
+
this.error("[XY] Failed to process data message:", error);
|
|
525
525
|
}
|
|
526
526
|
return;
|
|
527
527
|
}
|
|
528
528
|
// Parse msgDetail as A2AJsonRpcRequest
|
|
529
529
|
const a2aRequest = JSON.parse(inboundMsg.msgDetail);
|
|
530
|
-
|
|
530
|
+
this.log(`[XY] Parsed A2A request, method: ${a2aRequest.method}`);
|
|
531
531
|
const sessionId = inboundMsg.sessionId;
|
|
532
|
-
|
|
532
|
+
this.log(`[XY] Session ID: ${sessionId}`);
|
|
533
533
|
// Emit message event
|
|
534
|
-
|
|
534
|
+
this.log("[XY] *** EMITTING message event (Wrapped path) ***");
|
|
535
535
|
this.emit("message", a2aRequest, sessionId);
|
|
536
536
|
}
|
|
537
537
|
catch (error) {
|
|
538
|
-
|
|
538
|
+
this.error("[XY] Failed to parse message:", error);
|
|
539
539
|
}
|
|
540
540
|
}
|
|
541
541
|
/**
|
|
542
542
|
* Handle connection close.
|
|
543
543
|
*/
|
|
544
544
|
handleClose(code, reason) {
|
|
545
|
-
|
|
545
|
+
this.log(`WebSocket disconnected: code=${code}, reason=${reason}`);
|
|
546
546
|
// Only process if this is the current connection
|
|
547
547
|
if (!this.ws) {
|
|
548
548
|
this.log("Ignoring close event for already cleaned connection");
|