@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.
- package/package.json +1 -1
- package/yeaft/web-bridge.js +51 -16
package/package.json
CHANGED
package/yeaft/web-bridge.js
CHANGED
|
@@ -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
|
|
3625
|
-
*
|
|
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
|
|
3630
|
-
|
|
3631
|
-
|
|
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
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3668
|
+
if (turnAborted) {
|
|
3669
|
+
success = true;
|
|
3670
|
+
abortedTurnIds.push(turnId);
|
|
3671
|
+
}
|
|
3672
|
+
turnAbortCtrls.delete(turnId);
|
|
3673
|
+
turnAbortMeta.delete(turnId);
|
|
3644
3674
|
}
|
|
3645
3675
|
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
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
|
/**
|