@ynhcj/xiaoyi-channel 0.0.134-next → 0.0.135-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.
- package/dist/src/bot.js +23 -3
- package/package.json +1 -1
package/dist/src/bot.js
CHANGED
|
@@ -216,6 +216,9 @@ export async function handleXYMessage(params) {
|
|
|
216
216
|
return;
|
|
217
217
|
}
|
|
218
218
|
// ── First message (non-steer) path below ──────────────────────
|
|
219
|
+
// 🔑 立即创建 streaming 信号——必须在文件下载等耗时操作之前,
|
|
220
|
+
// 否则 steer 消息的 dispatchSteerWhenReady 会找不到信号而跳过等待。
|
|
221
|
+
createStreamingSignal(parsed.sessionId);
|
|
219
222
|
// File download — only for real user messages, steer injections have no files
|
|
220
223
|
let mediaPayload = {};
|
|
221
224
|
if (!skipReg) {
|
|
@@ -264,8 +267,7 @@ export async function handleXYMessage(params) {
|
|
|
264
267
|
ReplyToBody: undefined, // A2A protocol doesn't support reply/quote
|
|
265
268
|
...mediaPayload,
|
|
266
269
|
});
|
|
267
|
-
// 🔑
|
|
268
|
-
createStreamingSignal(parsed.sessionId);
|
|
270
|
+
// 🔑 Streaming 信号已在上方创建(在文件下载之前)
|
|
269
271
|
const steerState = { steered: false };
|
|
270
272
|
// 🔑 创建dispatcher
|
|
271
273
|
logger.log(`[BOT-DISPATCHER] 🎯 Creating reply dispatcher`);
|
|
@@ -450,13 +452,31 @@ function enqueueSteer(params) {
|
|
|
450
452
|
async function dispatchSteerWhenReady(params) {
|
|
451
453
|
const { sessionId, sessionKey, steerText } = params;
|
|
452
454
|
// 1. 等待第一条消息开始 streaming
|
|
453
|
-
|
|
455
|
+
// signal 可能尚未创建(第一条消息还在文件下载等耗时操作中),
|
|
456
|
+
// 轮询等待直到 signal 出现,最長等待 ~5 秒。
|
|
457
|
+
let signal = streamingSignals.get(sessionId);
|
|
458
|
+
if (!signal) {
|
|
459
|
+
logger.log(`[STEER-QUEUE] ⏳ Signal not yet created, polling for session=${sessionId}`);
|
|
460
|
+
for (let i = 0; i < 50; i++) {
|
|
461
|
+
await new Promise(r => setTimeout(r, 100));
|
|
462
|
+
signal = streamingSignals.get(sessionId);
|
|
463
|
+
if (signal)
|
|
464
|
+
break;
|
|
465
|
+
if (!hasActiveTask(sessionId)) {
|
|
466
|
+
logger.log(`[STEER-QUEUE] ℹ️ First message completed while waiting, skip steer`);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
454
471
|
if (signal) {
|
|
455
472
|
logger.log(`[STEER-QUEUE] ⏳ Waiting for streaming signal, session=${sessionId}`);
|
|
456
473
|
await signal.promise;
|
|
457
474
|
streamingSignals.delete(sessionId);
|
|
458
475
|
logger.log(`[STEER-QUEUE] ✅ Streaming signal received, session=${sessionId}`);
|
|
459
476
|
}
|
|
477
|
+
else {
|
|
478
|
+
logger.log(`[STEER-QUEUE] ⚠️ Signal never appeared, proceeding without wait`);
|
|
479
|
+
}
|
|
460
480
|
// 2. 第一条消息已结束 → 放弃
|
|
461
481
|
if (!hasActiveTask(sessionId)) {
|
|
462
482
|
logger.log(`[STEER-QUEUE] ℹ️ First message completed, skip steer`);
|