@ynhcj/xiaoyi 2.3.6 → 2.3.7
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/dist/websocket.d.ts +8 -0
- package/dist/websocket.js +42 -10
- package/package.json +1 -1
package/dist/websocket.d.ts
CHANGED
|
@@ -50,6 +50,14 @@ export declare class XiaoYiWebSocketManager extends EventEmitter {
|
|
|
50
50
|
* Setup WebSocket event handlers for specific server
|
|
51
51
|
*/
|
|
52
52
|
private setupWebSocketHandlers;
|
|
53
|
+
/**
|
|
54
|
+
* Extract sessionId from message based on method type
|
|
55
|
+
* Different methods have sessionId in different locations:
|
|
56
|
+
* - message/stream: sessionId in params
|
|
57
|
+
* - tasks/cancel: sessionId at top level
|
|
58
|
+
* - clearContext: sessionId at top level
|
|
59
|
+
*/
|
|
60
|
+
private extractSessionId;
|
|
53
61
|
/**
|
|
54
62
|
* Handle incoming message from specific server
|
|
55
63
|
*/
|
package/dist/websocket.js
CHANGED
|
@@ -303,6 +303,26 @@ class XiaoYiWebSocketManager extends events_1.EventEmitter {
|
|
|
303
303
|
}
|
|
304
304
|
});
|
|
305
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* Extract sessionId from message based on method type
|
|
308
|
+
* Different methods have sessionId in different locations:
|
|
309
|
+
* - message/stream: sessionId in params
|
|
310
|
+
* - tasks/cancel: sessionId at top level
|
|
311
|
+
* - clearContext: sessionId at top level
|
|
312
|
+
*/
|
|
313
|
+
extractSessionId(message) {
|
|
314
|
+
// For message/stream, sessionId is in params
|
|
315
|
+
if (message.method === "message/stream") {
|
|
316
|
+
return message.params?.sessionId;
|
|
317
|
+
}
|
|
318
|
+
// For tasks/cancel and clearContext, sessionId is at top level
|
|
319
|
+
if (message.method === "tasks/cancel" ||
|
|
320
|
+
message.method === "clearContext" ||
|
|
321
|
+
message.action === "clear") {
|
|
322
|
+
return message.sessionId;
|
|
323
|
+
}
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
306
326
|
/**
|
|
307
327
|
* Handle incoming message from specific server
|
|
308
328
|
*/
|
|
@@ -319,10 +339,12 @@ class XiaoYiWebSocketManager extends events_1.EventEmitter {
|
|
|
319
339
|
console.warn(`[${sourceServer}] Mismatched agentId: ${message.agentId}, expected: ${this.config.agentId}. Discarding.`);
|
|
320
340
|
return;
|
|
321
341
|
}
|
|
342
|
+
// Extract sessionId based on method type
|
|
343
|
+
const sessionId = this.extractSessionId(message);
|
|
322
344
|
// Record session → server mapping
|
|
323
|
-
if (
|
|
324
|
-
this.sessionServerMap.set(
|
|
325
|
-
console.log(`[MAP] Session ${
|
|
345
|
+
if (sessionId) {
|
|
346
|
+
this.sessionServerMap.set(sessionId, sourceServer);
|
|
347
|
+
console.log(`[MAP] Session ${sessionId} -> ${sourceServer}`);
|
|
326
348
|
}
|
|
327
349
|
// Handle special messages (clearContext, tasks/cancel)
|
|
328
350
|
if (message.method === "clearContext") {
|
|
@@ -476,16 +498,21 @@ class XiaoYiWebSocketManager extends events_1.EventEmitter {
|
|
|
476
498
|
* Handle clearContext method
|
|
477
499
|
*/
|
|
478
500
|
handleClearContext(message, sourceServer) {
|
|
479
|
-
|
|
480
|
-
|
|
501
|
+
const sessionId = this.extractSessionId(message);
|
|
502
|
+
if (!sessionId) {
|
|
503
|
+
console.error(`[${sourceServer}] Failed to extract sessionId from clearContext message`);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
console.log(`[${sourceServer}] Received clearContext for session: ${sessionId}`);
|
|
507
|
+
this.sendClearContextResponse(message.id, sessionId, true, sourceServer)
|
|
481
508
|
.catch(error => console.error(`[${sourceServer}] Failed to send clearContext response:`, error));
|
|
482
509
|
this.emit("clear", {
|
|
483
|
-
sessionId:
|
|
510
|
+
sessionId: sessionId,
|
|
484
511
|
id: message.id,
|
|
485
512
|
serverId: sourceServer,
|
|
486
513
|
});
|
|
487
514
|
// Remove session mapping
|
|
488
|
-
this.sessionServerMap.delete(
|
|
515
|
+
this.sessionServerMap.delete(sessionId);
|
|
489
516
|
}
|
|
490
517
|
/**
|
|
491
518
|
* Handle clear message (legacy format)
|
|
@@ -505,16 +532,21 @@ class XiaoYiWebSocketManager extends events_1.EventEmitter {
|
|
|
505
532
|
* Handle tasks/cancel message
|
|
506
533
|
*/
|
|
507
534
|
handleTasksCancelMessage(message, sourceServer) {
|
|
535
|
+
const sessionId = this.extractSessionId(message);
|
|
536
|
+
if (!sessionId) {
|
|
537
|
+
console.error(`[${sourceServer}] Failed to extract sessionId from tasks/cancel message`);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
508
540
|
const effectiveTaskId = message.taskId || message.id;
|
|
509
541
|
console.log("\n" + "=".repeat(60));
|
|
510
542
|
console.log(`[${sourceServer}] Received cancel request`);
|
|
511
|
-
console.log(` Session: ${
|
|
543
|
+
console.log(` Session: ${sessionId}`);
|
|
512
544
|
console.log(` Task ID: ${effectiveTaskId}`);
|
|
513
545
|
console.log("=".repeat(60) + "\n");
|
|
514
|
-
this.sendTasksCancelResponse(message.id,
|
|
546
|
+
this.sendTasksCancelResponse(message.id, sessionId, true, sourceServer)
|
|
515
547
|
.catch(error => console.error(`[${sourceServer}] Failed to send cancel response:`, error));
|
|
516
548
|
this.emit("cancel", {
|
|
517
|
-
sessionId:
|
|
549
|
+
sessionId: sessionId,
|
|
518
550
|
taskId: effectiveTaskId,
|
|
519
551
|
id: message.id,
|
|
520
552
|
serverId: sourceServer,
|