refactor: move message received hook into event binding controller

This commit is contained in:
Youzini-afk
2026-03-29 17:24:57 +08:00
parent 899216db62
commit 33afa996aa
3 changed files with 57 additions and 30 deletions

View File

@@ -245,3 +245,39 @@ export async function onBeforeCombinePromptsController(runtime) {
runtime.getGenerationRecallHookStateFromResult(recallResult), runtime.getGenerationRecallHookStateFromResult(recallResult),
); );
} }
export function onMessageReceivedController(runtime) {
if (runtime.getCurrentGraph()) {
if (
runtime.getGraphPersistenceState()?.pendingPersist &&
runtime.isGraphMetadataWriteAllowed()
) {
runtime.maybeFlushQueuedGraphPersist("message-received-pending-flush");
}
runtime.maybeCaptureGraphShadowSnapshot("message-received-passive-sync");
}
const pendingRecallSendIntent = runtime.getPendingRecallSendIntent();
if (
pendingRecallSendIntent?.text &&
!runtime.isFreshRecallInputRecord(pendingRecallSendIntent)
) {
runtime.setPendingRecallSendIntent(runtime.createRecallInputRecord());
}
const context = runtime.getContext();
const chat = context?.chat;
const lastMessage =
Array.isArray(chat) && chat.length > 0 ? chat[chat.length - 1] : null;
if (runtime.isAssistantChatMessage(lastMessage)) {
runtime.queueMicrotask(() => {
void runtime.runExtraction().catch((error) => {
runtime.console.error("[ST-BME] 异步自动提取失败:", error);
runtime.notifyExtractionIssue(
error?.message || String(error) || "自动提取失败",
);
});
});
}
}

View File

@@ -64,6 +64,7 @@ import {
onGenerationAfterCommandsController, onGenerationAfterCommandsController,
onMessageDeletedController, onMessageDeletedController,
onMessageEditedController, onMessageEditedController,
onMessageReceivedController,
onMessageSentController, onMessageSentController,
onMessageSwipedController, onMessageSwipedController,
registerBeforeCombinePromptsController, registerBeforeCombinePromptsController,
@@ -4456,36 +4457,25 @@ async function onBeforeCombinePrompts() {
} }
function onMessageReceived() { function onMessageReceived() {
// 新消息到达,图状态可能需要更新 return onMessageReceivedController({
if (currentGraph) { console,
if (graphPersistenceState.pendingPersist && isGraphMetadataWriteAllowed()) { createRecallInputRecord,
maybeFlushQueuedGraphPersist("message-received-pending-flush"); getContext,
} getCurrentGraph: () => currentGraph,
maybeCaptureGraphShadowSnapshot("message-received-passive-sync"); getGraphPersistenceState: () => graphPersistenceState,
} getPendingRecallSendIntent: () => pendingRecallSendIntent,
isAssistantChatMessage,
if ( isFreshRecallInputRecord,
pendingRecallSendIntent.text && isGraphMetadataWriteAllowed,
!isFreshRecallInputRecord(pendingRecallSendIntent) maybeCaptureGraphShadowSnapshot,
) { maybeFlushQueuedGraphPersist,
pendingRecallSendIntent = createRecallInputRecord(); notifyExtractionIssue,
} queueMicrotask,
runExtraction,
const context = getContext(); setPendingRecallSendIntent: (record) => {
const chat = context?.chat; pendingRecallSendIntent = record;
const lastMessage = },
Array.isArray(chat) && chat.length > 0 ? chat[chat.length - 1] : null; });
if (isAssistantChatMessage(lastMessage)) {
queueMicrotask(() => {
void runExtraction().catch((error) => {
console.error("[ST-BME] 异步自动提取失败:", error);
notifyExtractionIssue(
error?.message || String(error) || "自动提取失败",
);
});
});
}
} }
// ==================== UI 操作 ==================== // ==================== UI 操作 ====================

View File

@@ -48,6 +48,7 @@ import {
writeChatMetadataPatch, writeChatMetadataPatch,
writeGraphShadowSnapshot, writeGraphShadowSnapshot,
} from "../graph-persistence.js"; } from "../graph-persistence.js";
import { onMessageReceivedController } from "../event-binding.js";
const moduleDir = path.dirname(fileURLToPath(import.meta.url)); const moduleDir = path.dirname(fileURLToPath(import.meta.url));
const indexPath = path.resolve(moduleDir, "../index.js"); const indexPath = path.resolve(moduleDir, "../index.js");