From 9990e84d372cd4572c91f3f529e7b1f21b8f0c40 Mon Sep 17 00:00:00 2001
From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
Date: Tue, 11 Nov 2025 17:08:59 -0800
Subject: [PATCH] fix: ensure revert dialog moves that prompt to input box
(#4227)
---
.../cmd/tui/routes/session/dialog-message.tsx | 28 +++++++++++++++++--
.../src/cli/cmd/tui/routes/session/index.tsx | 8 +++++-
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
index ee2b77af..a59fad7b 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
@@ -3,8 +3,13 @@ import { useSync } from "@tui/context/sync"
import { DialogSelect } from "@tui/ui/dialog-select"
import { useSDK } from "@tui/context/sdk"
import { useRoute } from "@tui/context/route"
+import type { PromptInfo } from "@tui/component/prompt/history"
-export function DialogMessage(props: { messageID: string; sessionID: string }) {
+export function DialogMessage(props: {
+ messageID: string
+ sessionID: string
+ setPrompt?: (prompt: PromptInfo) => void
+}) {
const sync = useSync()
const sdk = useSDK()
const message = createMemo(() => sync.data.message[props.sessionID]?.find((x) => x.id === props.messageID))
@@ -19,14 +24,33 @@ export function DialogMessage(props: { messageID: string; sessionID: string }) {
value: "session.revert",
description: "undo messages and file changes",
onSelect: (dialog) => {
+ const msg = message()
+ if (!msg) return
+
sdk.client.session.revert({
path: {
id: props.sessionID,
},
body: {
- messageID: message()!.id,
+ messageID: msg.id,
},
})
+
+ if (props.setPrompt) {
+ const parts = sync.data.part[msg.id]
+ const promptInfo = parts.reduce(
+ (agg, part) => {
+ if (part.type === "text") {
+ if (!part.synthetic) agg.input += part.text
+ }
+ if (part.type === "file") agg.parts.push(part)
+ return agg
+ },
+ { input: "", parts: [] as PromptInfo["parts"] },
+ )
+ props.setPrompt(promptInfo)
+ }
+
dialog.clear()
},
},
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 7b25da39..4c3dd96f 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
@@ -757,7 +757,13 @@ export function Session() {
index={index()}
onMouseUp={() => {
if (renderer.getSelection()?.getSelectedText()) return
- dialog.replace(() => )
+ dialog.replace(() => (
+ prompt.set(promptInfo)}
+ />
+ ))
}}
message={message as UserMessage}
parts={sync.data.part[message.id] ?? []}