@yeaft/webchat-agent 0.1.1025 → 0.1.1026

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 (2) hide show
  1. package/package.json +1 -1
  2. package/yeaft/web-bridge.js +51 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yeaft/webchat-agent",
3
- "version": "0.1.1025",
3
+ "version": "0.1.1026",
4
4
  "description": "Remote agent for Yeaft WebChat — connects worker machines to the central server",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -3481,6 +3481,17 @@ function removeQueuedVpTurn(turnId) {
3481
3481
  return removed;
3482
3482
  }
3483
3483
 
3484
+ function findTurnIdsForVp({ sessionId = null, vpId = null } = {}) {
3485
+ if (!vpId) return [];
3486
+ const ids = [];
3487
+ for (const [turnId, meta] of turnAbortMeta.entries()) {
3488
+ if (!meta || meta.vpId !== vpId) continue;
3489
+ if (sessionId && meta.sessionId !== sessionId) continue;
3490
+ ids.push(turnId);
3491
+ }
3492
+ return ids;
3493
+ }
3494
+
3484
3495
  function emitQueuedTurnAbort(meta, turnId) {
3485
3496
  if (!meta?.vpId) return;
3486
3497
  const sessionId = meta.sessionId || null;
@@ -3621,31 +3632,55 @@ export function handleYeaftAbortAll(msg = {}) {
3621
3632
  }
3622
3633
 
3623
3634
  /**
3624
- * Per-VP abort: stops a single VP turn by turnId without affecting siblings.
3625
- * Frontend sends `{ type: 'yeaft_abort_turn', turnId }`.
3626
- * @param {{ turnId?: string }} msg
3635
+ * Per-VP abort: stops a single VP turn without affecting siblings.
3636
+ * New clients send `{ sessionId, vpId }`; `turnId` is kept for legacy buttons.
3637
+ * @param {{ turnId?: string, sessionId?: string, vpId?: string }} msg
3627
3638
  */
3628
3639
  export function handleYeaftAbortTurn(msg = {}) {
3629
- const { turnId } = msg;
3630
- if (!turnId) {
3631
- sendSessionEvent({ type: 'yeaft_turn_aborted', turnId: null, success: false });
3640
+ const sessionId = msg.sessionId || null;
3641
+ const vpId = msg.vpId || null;
3642
+ const turnIds = msg.turnId ? [msg.turnId] : findTurnIdsForVp({ sessionId, vpId });
3643
+
3644
+ if (turnIds.length === 0) {
3645
+ sendSessionEvent({ type: 'yeaft_turn_aborted', turnId: null, turnIds: [], success: false, sessionId, vpId }, sessionId ? { sessionId } : undefined);
3632
3646
  return;
3633
3647
  }
3634
3648
 
3635
- const meta = turnAbortMeta.get(turnId);
3636
- const ctrl = turnAbortCtrls.get(turnId);
3637
3649
  let success = false;
3650
+ const abortedTurnIds = [];
3651
+ let ackSessionId = sessionId;
3652
+ let ackVpId = vpId;
3653
+
3654
+ for (const turnId of turnIds) {
3655
+ const meta = turnAbortMeta.get(turnId);
3656
+ const ctrl = turnAbortCtrls.get(turnId);
3657
+ if (!ackSessionId && meta?.sessionId) ackSessionId = meta.sessionId;
3658
+ if (!ackVpId && meta?.vpId) ackVpId = meta.vpId;
3659
+
3660
+ let turnAborted = false;
3661
+ if (ctrl && !ctrl.signal.aborted) {
3662
+ try { ctrl.abort(); turnAborted = true; } catch { /* best-effort */ }
3663
+ } else if (removeQueuedVpTurn(turnId)) {
3664
+ turnAborted = true;
3665
+ emitQueuedTurnAbort(meta, turnId);
3666
+ }
3638
3667
 
3639
- if (ctrl && !ctrl.signal.aborted) {
3640
- try { ctrl.abort(); success = true; } catch { /* best-effort */ }
3641
- } else if (removeQueuedVpTurn(turnId)) {
3642
- success = true;
3643
- emitQueuedTurnAbort(meta, turnId);
3668
+ if (turnAborted) {
3669
+ success = true;
3670
+ abortedTurnIds.push(turnId);
3671
+ }
3672
+ turnAbortCtrls.delete(turnId);
3673
+ turnAbortMeta.delete(turnId);
3644
3674
  }
3645
3675
 
3646
- turnAbortCtrls.delete(turnId);
3647
- turnAbortMeta.delete(turnId);
3648
- sendSessionEvent({ type: 'yeaft_turn_aborted', turnId, success, sessionId: meta?.sessionId || null }, meta?.sessionId ? { sessionId: meta.sessionId } : undefined);
3676
+ sendSessionEvent({
3677
+ type: 'yeaft_turn_aborted',
3678
+ turnId: abortedTurnIds[0] || turnIds[0] || null,
3679
+ turnIds: abortedTurnIds.length > 0 ? abortedTurnIds : turnIds,
3680
+ success,
3681
+ sessionId: ackSessionId || null,
3682
+ vpId: ackVpId || null,
3683
+ }, ackSessionId ? { sessionId: ackSessionId } : undefined);
3649
3684
  }
3650
3685
 
3651
3686
  /**