summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2025-11-11 17:08:59 -0800
committerGitHub <[email protected]>2025-11-11 19:08:59 -0600
commit9990e84d372cd4572c91f3f529e7b1f21b8f0c40 (patch)
treecc81ea3b6383860a3723a043050f5b181e880d3d
parent0b86adbe997320c1a13e91899cace1ddd956a39a (diff)
downloadopencode-9990e84d372cd4572c91f3f529e7b1f21b8f0c40.tar.gz
opencode-9990e84d372cd4572c91f3f529e7b1f21b8f0c40.zip
fix: ensure revert dialog moves that prompt to input box (#4227)
-rw-r--r--packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx28
-rw-r--r--packages/opencode/src/cli/cmd/tui/routes/session/index.tsx8
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 ee2b77afc..a59fad7b1 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 7b25da397..4c3dd96ff 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(() => <DialogMessage messageID={message.id} sessionID={route.sessionID} />)
+ dialog.replace(() => (
+ <DialogMessage
+ messageID={message.id}
+ sessionID={route.sessionID}
+ setPrompt={(promptInfo) => prompt.set(promptInfo)}
+ />
+ ))
}}
message={message as UserMessage}
parts={sync.data.part[message.id] ?? []}