From 3eeb4ccd8b1b595da7579f38310f194f440e05f6 Mon Sep 17 00:00:00 2001 From: khj809 Date: Sat, 31 Jan 2026 18:19:26 +0900 Subject: [PATCH] Fix lastUser identification and loop exit condition --- packages/opencode/src/session/prompt.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 94eabdef7f4..9e6e8cf6b6f 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -274,6 +274,8 @@ export namespace SessionPrompt { log.info("loop", { step, sessionID }) if (abort.aborted) break let msgs = await MessageV2.filterCompacted(MessageV2.stream(sessionID)) + // Sort chronologically to ensure that `lastUser` and `lastAssistant` are found correctly + msgs.sort((a, b) => a.info.time.created - b.info.time.created) let lastUser: MessageV2.User | undefined let lastAssistant: MessageV2.Assistant | undefined @@ -293,10 +295,12 @@ export namespace SessionPrompt { } if (!lastUser) throw new Error("No user message found in stream. This should never happen.") + + // Check if we have a finished assistant response to the last user message if ( lastAssistant?.finish && !["tool-calls", "unknown"].includes(lastAssistant.finish) && - lastUser.id < lastAssistant.id + lastUser.id === lastAssistant.parentID ) { log.info("exiting loop", { sessionID }) break