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),
);
}
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,
onMessageDeletedController,
onMessageEditedController,
onMessageReceivedController,
onMessageSentController,
onMessageSwipedController,
registerBeforeCombinePromptsController,
@@ -4456,36 +4457,25 @@ async function onBeforeCombinePrompts() {
}
function onMessageReceived() {
// 新消息到达,图状态可能需要更新
if (currentGraph) {
if (graphPersistenceState.pendingPersist && isGraphMetadataWriteAllowed()) {
maybeFlushQueuedGraphPersist("message-received-pending-flush");
}
maybeCaptureGraphShadowSnapshot("message-received-passive-sync");
}
if (
pendingRecallSendIntent.text &&
!isFreshRecallInputRecord(pendingRecallSendIntent)
) {
pendingRecallSendIntent = createRecallInputRecord();
}
const context = getContext();
const chat = context?.chat;
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) || "自动提取失败",
);
});
});
}
return onMessageReceivedController({
console,
createRecallInputRecord,
getContext,
getCurrentGraph: () => currentGraph,
getGraphPersistenceState: () => graphPersistenceState,
getPendingRecallSendIntent: () => pendingRecallSendIntent,
isAssistantChatMessage,
isFreshRecallInputRecord,
isGraphMetadataWriteAllowed,
maybeCaptureGraphShadowSnapshot,
maybeFlushQueuedGraphPersist,
notifyExtractionIssue,
queueMicrotask,
runExtraction,
setPendingRecallSendIntent: (record) => {
pendingRecallSendIntent = record;
},
});
}
// ==================== UI 操作 ====================

View File

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