mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
fix: MESSAGE_SENT 时把召回记录重绑到刚入场的 user 楼层(对齐酒馆 GENERATION_AFTER_COMMANDS 早于 sendMessageAsUser)
Made-with: Cursor
This commit is contained in:
@@ -261,6 +261,10 @@ export function onMessageSentController(runtime, messageId) {
|
||||
resolvedMessageId,
|
||||
message.mes || "",
|
||||
);
|
||||
// GENERATION_AFTER_COMMANDS 在 sendMessageAsUser 之前触发,此时新用户消息
|
||||
// 尚未进入 chat,recall 记录会被写到上一条 user 上。这里用户消息刚入场,
|
||||
// transaction 仍在桥接窗口内,立即把记录重新绑定到正确的楼层。
|
||||
runtime.rebindRecallRecordToNewUserMessage?.(resolvedMessageId);
|
||||
runtime.refreshPersistedRecallMessageUi?.();
|
||||
}
|
||||
|
||||
|
||||
48
index.js
48
index.js
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user