@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.
@@ -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 (message.params.sessionId) {
324
- this.sessionServerMap.set(message.params.sessionId, sourceServer);
325
- console.log(`[MAP] Session ${message.params.sessionId} -> ${sourceServer}`);
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
- console.log(`[${sourceServer}] Received clearContext for session: ${message.params.sessionId}`);
480
- this.sendClearContextResponse(message.id, message.params.sessionId, true, sourceServer)
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: message.params.sessionId,
510
+ sessionId: sessionId,
484
511
  id: message.id,
485
512
  serverId: sourceServer,
486
513
  });
487
514
  // Remove session mapping
488
- this.sessionServerMap.delete(message.params.sessionId);
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: ${message.sessionId}`);
543
+ console.log(` Session: ${sessionId}`);
512
544
  console.log(` Task ID: ${effectiveTaskId}`);
513
545
  console.log("=".repeat(60) + "\n");
514
- this.sendTasksCancelResponse(message.id, message.sessionId, true, sourceServer)
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: message.sessionId,
549
+ sessionId: sessionId,
518
550
  taskId: effectiveTaskId,
519
551
  id: message.id,
520
552
  serverId: sourceServer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynhcj/xiaoyi",
3
- "version": "2.3.6",
3
+ "version": "2.3.7",
4
4
  "description": "XiaoYi channel plugin for OpenClaw",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",