fix: MESSAGE_SENT 时把召回记录重绑到刚入场的 user 楼层(对齐酒馆 GENERATION_AFTER_COMMANDS 早于 sendMessageAsUser)

Made-with: Cursor
This commit is contained in:
Youzini-afk
2026-04-06 20:18:40 +08:00
parent a0c706e410
commit d39e81cde5
2 changed files with 52 additions and 0 deletions

View File

@@ -1543,6 +1543,53 @@ function doesChatUserMessageMatchRecallCandidates(message, candidateHashes) {
return candidateHashes.has(hashRecallInput(normalizedMessage));
}
function rebindRecallRecordToNewUserMessage(newUserMessageIndex) {
const chat = getContext()?.chat;
if (
!Array.isArray(chat) ||
!Number.isFinite(newUserMessageIndex) ||
!chat[newUserMessageIndex]?.is_user
) {
return;
}
if (readPersistedRecallFromUserMessage(chat, newUserMessageIndex)) {
return;
}
const recentTransaction = findRecentGenerationRecallTransactionForChat();
const recallResult = getGenerationRecallTransactionResult(recentTransaction);
if (
!recallResult ||
recallResult.status !== "completed" ||
!recallResult.didRecall ||
!String(recallResult.injectionText || "").trim()
) {
return;
}
const record = buildPersistedRecallRecord(
{
injectionText: String(recallResult.injectionText || "").trim(),
selectedNodeIds: recallResult.selectedNodeIds || [],
recallInput: String(
recallResult.recallInput || recallResult.userMessage || "",
),
recallSource: String(recallResult.source || ""),
hookName: String(
recallResult.hookName ||
recentTransaction?.lastRecallMeta?.hookName ||
"",
),
tokenEstimate: estimateTokens(
String(recallResult.injectionText || "").trim(),
),
manuallyEdited: false,
},
null,
);
if (writePersistedRecallToUserMessage(chat, newUserMessageIndex, record)) {
triggerChatMetadataSave(getContext(), { immediate: false });
}
}
function resolveRecallPersistenceTargetUserMessageIndex(
chat,
{
@@ -9235,6 +9282,7 @@ function onMessageSent(messageId) {
getContext,
isTrivialUserInput,
recordRecallSentUserMessage,
rebindRecallRecordToNewUserMessage,
refreshPersistedRecallMessageUi: schedulePersistedRecallMessageUiRefresh,
},
messageId,