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] ?? []}