diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx index 742d51be2280..28bef1a879a5 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx @@ -23,7 +23,6 @@ export function DialogForkFromTimeline(props: { sessionID: string; onMove: (mess const messages = sync.data.message[props.sessionID] ?? [] const result = [] as DialogSelectOption[] for (const message of messages) { - if (message.role !== "user") continue const part = (sync.data.part[message.id] ?? []).find( (x) => x.type === "text" && !x.synthetic && !x.ignored, ) as TextPart diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index eb39519854cb..9f0bc1479a9b 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -659,6 +659,18 @@ export namespace MessageV2 { text: `[Attached ${part.mime}: ${part.filename ?? "file"}]`, }) } else { + if (isMedia(part.mime)) { + const filename = part.filename ?? "" + const lower = filename.toLowerCase() + let trigger = "image" + if (lower.includes("screenshot")) trigger = "screenshot" + else if (lower.includes("clipboard")) trigger = "clipboard" + else if (lower.includes("photo")) trigger = "photo" + userMessage.parts.push({ + type: "text", + text: `[${trigger}]`, + }) + } userMessage.parts.push({ type: "file", url: part.url, diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index 3634d6fb7ec8..71b356eca5c9 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -254,6 +254,7 @@ describe("session.message-v2.toModelMessage", () => { role: "user", content: [ { type: "text", text: "hello" }, + { type: "text", text: "[image]" }, { type: "file", mediaType: "image/png",