From 106cd5c8b1217d3c426c171aa4f9096253032d3b Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 16 Feb 2026 15:23:43 +0900 Subject: [PATCH] fix: re-read fresh messages before empty scan & dedup isRecord import - Re-read messages from SDK after injectTextPartAsync to prevent stale snapshot from causing duplicate placeholder injection (P2) - Replace local isRecord with shared import from record-type-guard (P3) --- .../session-recovery/recover-empty-content-message-sdk.ts | 3 ++- src/hooks/session-recovery/storage/messages-reader.ts | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/hooks/session-recovery/recover-empty-content-message-sdk.ts b/src/hooks/session-recovery/recover-empty-content-message-sdk.ts index e8be862a..10b96bb7 100644 --- a/src/hooks/session-recovery/recover-empty-content-message-sdk.ts +++ b/src/hooks/session-recovery/recover-empty-content-message-sdk.ts @@ -91,7 +91,8 @@ export async function recoverEmptyContentMessageFromSDK( } } - const emptyMessageIDs = findEmptyMessagesFromSDK(messages) + const freshMessages = await readMessagesFromSDK(client, sessionID) + const emptyMessageIDs = findEmptyMessagesFromSDK(freshMessages) for (const messageID of emptyMessageIDs) { if ( await dependencies.replaceEmptyTextPartsAsync( diff --git a/src/hooks/session-recovery/storage/messages-reader.ts b/src/hooks/session-recovery/storage/messages-reader.ts index 0334a19e..9a3301da 100644 --- a/src/hooks/session-recovery/storage/messages-reader.ts +++ b/src/hooks/session-recovery/storage/messages-reader.ts @@ -4,13 +4,10 @@ import type { PluginInput } from "@opencode-ai/plugin" import type { StoredMessageMeta } from "../types" import { getMessageDir } from "./message-dir" import { isSqliteBackend } from "../../../shared" +import { isRecord } from "../../../shared/record-type-guard" type OpencodeClient = PluginInput["client"] -function isRecord(value: unknown): value is Record { - return typeof value === "object" && value !== null -} - function normalizeSDKMessage( sessionID: string, value: unknown