From ca3ea0bbe2615ac4bff71b8543ee1a271ed6e405 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 18 May 2026 15:50:23 +0900 Subject: [PATCH] fix(messages-transform): narrow assistant-tail recovery trigger Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/plugin/messages-transform.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/plugin/messages-transform.ts b/src/plugin/messages-transform.ts index ab3999456..e301c4efc 100644 --- a/src/plugin/messages-transform.ts +++ b/src/plugin/messages-transform.ts @@ -28,6 +28,34 @@ function findLastUserMessage(messages: MessageWithParts[]): UserMessageInfo | un return undefined } +function findLastUserTurn(messages: MessageWithParts[]): MessageWithParts | undefined { + for (let index = messages.length - 1; index >= 0; index -= 1) { + const message = messages[index] + if (message?.info.role === "user") { + return message + } + } + + return undefined +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null +} + +function isCompactionContinuationPart(part: unknown): boolean { + if (!isRecord(part)) { + return false + } + + const metadata = part["metadata"] + return isRecord(metadata) && metadata["compaction_continue"] === true +} + +function hasInternalContinuationTrigger(messages: MessageWithParts[]): boolean { + return findLastUserTurn(messages)?.parts.some(isCompactionContinuationPart) === true +} + function createAssistantPrefillRecoveryMessage( lastAssistantMessage: MessageWithParts, messages: MessageWithParts[], @@ -70,6 +98,10 @@ function ensureUserTurnAfterAssistantTail(output: MessagesTransformOutput): void return } + if (!hasInternalContinuationTrigger(output.messages)) { + return + } + output.messages.push(createAssistantPrefillRecoveryMessage(lastMessage, output.messages)) }