From dc7314f1f685ff75dcbc043e5cde72c376fdc78c Mon Sep 17 00:00:00 2001 From: Yoav Shai Date: Wed, 24 Dec 2025 00:11:23 +0200 Subject: [PATCH] Undo to last non-ignored message (fix for https://github.com/Opencode-DCP/opencode-dynamic-context-pruning/issues/191) --- .../opencode/src/cli/cmd/tui/routes/session/index.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 52ebbd308c9..153317b8e6c 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -523,7 +523,14 @@ export function Session() { const status = sync.data.session_status?.[route.sessionID] if (status?.type !== "idle") await sdk.client.session.abort({ sessionID: route.sessionID }).catch(() => {}) const revert = session()?.revert?.messageID - const message = messages().findLast((x) => (!revert || x.id < revert) && x.role === "user") + const message = messages().findLast((x) => { + if (x.role !== "user") return false + if (revert && x.id >= revert) return false + // Skip messages where all text parts are ignored + const parts = sync.data.part[x.id] + const hasNonIgnoredText = parts?.some((p) => p.type === "text" && !p.ignored) + return hasNonIgnoredText + }) if (!message) return sdk.client.session .revert({