Merge pull request #2866 from LTS2/fix/2830-empty-message-recovery-with-tool-calls
Fix empty message recovery when tool calls coexist with empty text parts
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import {
|
import {
|
||||||
findEmptyMessages,
|
findEmptyMessages,
|
||||||
findEmptyMessageByIndex,
|
findEmptyMessageByIndex,
|
||||||
|
findMessagesWithEmptyTextParts,
|
||||||
injectTextPart,
|
injectTextPart,
|
||||||
replaceEmptyTextParts,
|
replaceEmptyTextParts,
|
||||||
} from "../session-recovery/storage"
|
} from "../session-recovery/storage"
|
||||||
@@ -79,7 +80,9 @@ export async function fixEmptyMessages(params: {
|
|||||||
|
|
||||||
if (!fixed) {
|
if (!fixed) {
|
||||||
const emptyMessageIds = findEmptyMessages(params.sessionID)
|
const emptyMessageIds = findEmptyMessages(params.sessionID)
|
||||||
if (emptyMessageIds.length === 0) {
|
const emptyTextPartIds = findMessagesWithEmptyTextParts(params.sessionID)
|
||||||
|
const allIds = [...new Set([...emptyMessageIds, ...emptyTextPartIds])]
|
||||||
|
if (allIds.length === 0) {
|
||||||
await params.client.tui
|
await params.client.tui
|
||||||
.showToast({
|
.showToast({
|
||||||
body: {
|
body: {
|
||||||
@@ -93,7 +96,7 @@ export async function fixEmptyMessages(params: {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const messageID of emptyMessageIds) {
|
for (const messageID of allIds) {
|
||||||
const replaced = replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)
|
const replaced = replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)
|
||||||
if (replaced) {
|
if (replaced) {
|
||||||
fixed = true
|
fixed = true
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { normalizeSDKResponse } from "../../shared"
|
|||||||
import { isSqliteBackend } from "../../shared/opencode-storage-detection"
|
import { isSqliteBackend } from "../../shared/opencode-storage-detection"
|
||||||
import {
|
import {
|
||||||
findEmptyMessages,
|
findEmptyMessages,
|
||||||
|
findMessagesWithEmptyTextParts,
|
||||||
injectTextPart,
|
injectTextPart,
|
||||||
replaceEmptyTextParts,
|
replaceEmptyTextParts,
|
||||||
} from "../session-recovery/storage"
|
} from "../session-recovery/storage"
|
||||||
@@ -114,12 +115,14 @@ export async function sanitizeEmptyMessagesBeforeSummarize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const emptyMessageIds = findEmptyMessages(sessionID)
|
const emptyMessageIds = findEmptyMessages(sessionID)
|
||||||
if (emptyMessageIds.length === 0) {
|
const emptyTextPartIds = findMessagesWithEmptyTextParts(sessionID)
|
||||||
|
const allIds = [...new Set([...emptyMessageIds, ...emptyTextPartIds])]
|
||||||
|
if (allIds.length === 0) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
let fixedCount = 0
|
let fixedCount = 0
|
||||||
for (const messageID of emptyMessageIds) {
|
for (const messageID of allIds) {
|
||||||
const replaced = replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)
|
const replaced = replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)
|
||||||
if (replaced) {
|
if (replaced) {
|
||||||
fixedCount++
|
fixedCount++
|
||||||
@@ -135,7 +138,7 @@ export async function sanitizeEmptyMessagesBeforeSummarize(
|
|||||||
log("[auto-compact] pre-summarize sanitization fixed empty messages", {
|
log("[auto-compact] pre-summarize sanitization fixed empty messages", {
|
||||||
sessionID,
|
sessionID,
|
||||||
fixedCount,
|
fixedCount,
|
||||||
totalEmpty: emptyMessageIds.length,
|
totalEmpty: allIds.length,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user