diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 2554315908ce..0af880769c80 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -516,21 +516,18 @@ export const layer = Layer.effect( : value.providerMetadata, })) - const parts = yield* MessageV2.parts(ctx.assistantMessage.id).pipe( + const msgs = yield* MessageV2.filterCompactedEffect(ctx.sessionID).pipe( Effect.provideService(Database.Service, database), ) - const recentParts = parts.slice(-DOOM_LOOP_THRESHOLD) + const matchingParts = msgs.flatMap((m) => m.parts).filter( + (part) => + part.type === "tool" && + part.tool === value.name && + part.state.status !== "pending" && + JSON.stringify(part.state.input) === JSON.stringify(input), + ) - if ( - recentParts.length !== DOOM_LOOP_THRESHOLD || - !recentParts.every( - (part) => - part.type === "tool" && - part.tool === value.name && - part.state.status !== "pending" && - JSON.stringify(part.state.input) === JSON.stringify(input), - ) - ) { + if (matchingParts.length < DOOM_LOOP_THRESHOLD) { return }