@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.
Files changed (2) hide show
  1. package/dist/src/bot.js +23 -3
  2. 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
- // 🔑 第一条消息创建 streaming 信号(provider.ts 的 wrapStreamFn 触发)
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
- const signal = streamingSignals.get(sessionId);
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`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynhcj/xiaoyi-channel",
3
- "version": "0.0.134-next",
3
+ "version": "0.0.135-next",
4
4
  "description": "OpenClaw Xiaoyi Channel plugin - Xiaoyi A2A protocol integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",