@ynhcj/xiaoyi-channel 0.0.141-beta → 0.0.143-beta
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 +12 -2
- package/package.json +1 -1
package/dist/src/bot.js
CHANGED
|
@@ -204,11 +204,19 @@ export async function handleXYMessage(params) {
|
|
|
204
204
|
// 回调,onInitComplete 永远不会被触发。如果不释放,后续消息
|
|
205
205
|
// 会被 globalDispatchInitGate 永久阻塞。
|
|
206
206
|
params.onInitComplete?.();
|
|
207
|
+
// Steer 也支持文件 —— 提取并下载,附带到 mediaPayload
|
|
208
|
+
const steerFileParts = extractFileParts(parsed.parts);
|
|
209
|
+
const steerDownloadedFiles = await downloadFilesFromParts(steerFileParts);
|
|
210
|
+
const steerMediaPayload = buildXYMediaPayload(steerDownloadedFiles);
|
|
211
|
+
if (steerFileParts.length > 0) {
|
|
212
|
+
logger.log(`[BOT] 📎 Steer message with files: ${steerFileParts.length} file(s)`);
|
|
213
|
+
}
|
|
207
214
|
logger.log(`[BOT] 🔄 Steer message — enqueuing to streaming-signal queue`);
|
|
208
215
|
await enqueueSteer({
|
|
209
216
|
sessionId: parsed.sessionId,
|
|
210
217
|
sessionKey: route.sessionKey,
|
|
211
218
|
steerText: textForAgent, // 原始文本,不带 /steer 前缀
|
|
219
|
+
mediaPayload: steerMediaPayload,
|
|
212
220
|
cfg,
|
|
213
221
|
runtime,
|
|
214
222
|
parsed,
|
|
@@ -309,6 +317,7 @@ export async function handleXYMessage(params) {
|
|
|
309
317
|
logger.log(`[BOT] ✅ Steered dispatch settled (skipping cleanup)`);
|
|
310
318
|
return;
|
|
311
319
|
}
|
|
320
|
+
streamingSignals.delete(parsed.sessionId);
|
|
312
321
|
decrementTaskIdRef(parsed.sessionId);
|
|
313
322
|
unregisterSession(route.sessionKey);
|
|
314
323
|
logger.log(`[BOT] ✅ Cleanup completed`);
|
|
@@ -421,7 +430,8 @@ const steerQueues = _g.__xySteerQueues;
|
|
|
421
430
|
export function notifyModelStreaming(sessionId) {
|
|
422
431
|
const signal = streamingSignals.get(sessionId);
|
|
423
432
|
if (signal) {
|
|
424
|
-
|
|
433
|
+
// 不删除 signal——后续 steer 需要靠它判断模型已在 streaming。
|
|
434
|
+
// 清理由第一条消息的 onSettled 兜底。
|
|
425
435
|
signal.notify();
|
|
426
436
|
logger.log(`[STEER-QUEUE] 📡 Model streaming signal fired for session=${sessionId}`);
|
|
427
437
|
}
|
|
@@ -477,7 +487,6 @@ async function dispatchSteerWhenReady(params) {
|
|
|
477
487
|
if (signal) {
|
|
478
488
|
logger.log(`[STEER-QUEUE] ⏳ Waiting for streaming signal, session=${sessionId}`);
|
|
479
489
|
await signal.promise;
|
|
480
|
-
streamingSignals.delete(sessionId);
|
|
481
490
|
logger.log(`[STEER-QUEUE] ✅ Streaming signal received, session=${sessionId}`);
|
|
482
491
|
}
|
|
483
492
|
else {
|
|
@@ -525,6 +534,7 @@ async function dispatchSteerWhenReady(params) {
|
|
|
525
534
|
OriginatingChannel: "xiaoyi-channel",
|
|
526
535
|
OriginatingTo: sessionId,
|
|
527
536
|
ReplyToBody: undefined,
|
|
537
|
+
...params.mediaPayload,
|
|
528
538
|
});
|
|
529
539
|
const steerState = { steered: true };
|
|
530
540
|
const { dispatcher, replyOptions } = createXYReplyDispatcher({
|