From b8607fbc866adedd1b23df8a17f45be9975771e7 Mon Sep 17 00:00:00 2001 From: Hexay Bot Date: Sat, 21 Mar 2026 16:19:39 +0800 Subject: [PATCH] fix(session): stop prompt loop after model completion --- packages/opencode/src/session/prompt.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 5625c571cee9..0b39fcaa351b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -696,8 +696,14 @@ export namespace SessionPrompt { break } - // Check if model finished (finish reason is not "tool-calls" or "unknown") - const modelFinished = processor.message.finish && !["tool-calls", "unknown"].includes(processor.message.finish) + const parts = await MessageV2.parts(processor.message.id) + const hasToolActivity = parts.some((part) => part.type === "tool") + const modelFinished = + !!processor.message.finish && + (![ + "tool-calls", + "unknown", + ].includes(processor.message.finish) || (processor.message.finish === "unknown" && !hasToolActivity)) if (modelFinished && !processor.message.error) { if (format.type === "json_schema") { @@ -709,6 +715,8 @@ export namespace SessionPrompt { await Session.updateMessage(processor.message) break } + + break } if (result === "stop") break