diff --git a/index.js b/index.js index a718a27..ec78e9b 100644 --- a/index.js +++ b/index.js @@ -258,6 +258,7 @@ function getStageAbortLabel(stage) { function beginStageAbortController(stage) { const controller = new AbortController(); stageAbortControllers[stage] = controller; + syncStageNoticeAbortAction(stage); return controller; } @@ -359,6 +360,27 @@ function abortAllRunningStages() { } } +function getStageUiStatus(stage) { + switch (stage) { + case "extraction": + return lastExtractionStatus; + case "vector": + return lastVectorStatus; + case "recall": + return lastRecallStatus; + default: + return null; + } +} + +function syncStageNoticeAbortAction(stage) { + const status = getStageUiStatus(stage); + if (!status || !stageNoticeHandles[stage]) return; + updateStageNotice(stage, status.text, status.meta, status.level, { + title: getStageNoticeTitle(stage), + }); +} + function updateStageNotice( stage, text, @@ -2047,6 +2069,9 @@ async function runExtraction() { : unprocessedAssistantTurns.slice(0, extractEvery); const startIdx = batchAssistantTurns[0]; const endIdx = batchAssistantTurns[batchAssistantTurns.length - 1]; + isExtracting = true; + const extractionController = beginStageAbortController("extraction"); + const extractionSignal = extractionController.signal; setLastExtractionStatus( "提取中", `楼层 ${startIdx}-${endIdx}${smartTriggerDecision.triggered ? " · 智能触发" : ""}`, @@ -2054,10 +2079,6 @@ async function runExtraction() { { syncRuntime: true }, ); - isExtracting = true; - const extractionController = beginStageAbortController("extraction"); - const extractionSignal = extractionController.signal; - try { const batchResult = await executeExtractionBatch({ chat,