From 26a116fab8f96412b33b4f41e1cfcfa1cecf576e Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 4 Feb 2026 11:15:26 -0600 Subject: [PATCH 1/2] feat(app): last turn changes --- packages/app/src/pages/session.tsx | 77 ++++++++++++- packages/ui/src/components/session-review.tsx | 3 +- packages/ui/src/components/session-turn.tsx | 106 +----------------- packages/ui/src/i18n/en.ts | 1 + packages/ui/src/i18n/no.ts | 1 + 5 files changed, 80 insertions(+), 108 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 328e66a83734..bb043ca9e2cf 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -28,6 +28,7 @@ import { Dialog } from "@opencode-ai/ui/dialog" import { InlineInput } from "@opencode-ai/ui/inline-input" import { ResizeHandle } from "@opencode-ai/ui/resize-handle" import { Tabs } from "@opencode-ai/ui/tabs" +import { Select } from "@opencode-ai/ui/select" import { useCodeComponent } from "@opencode-ai/ui/context/code" import { LineComment as LineCommentView, LineCommentEditor } from "@opencode-ai/ui/line-comment" import { SessionTurn } from "@opencode-ai/ui/session-turn" @@ -54,7 +55,7 @@ import { useCommand } from "@/context/command" import { useLanguage } from "@/context/language" import { useNavigate, useParams } from "@solidjs/router" import { UserMessage } from "@opencode-ai/sdk/v2" -import type { FileDiff } from "@opencode-ai/sdk/v2/client" +import type { FileDiff } from "@opencode-ai/sdk/v2" import { useSDK } from "@/context/sdk" import { usePrompt } from "@/context/prompt" import { useComments, type LineComment } from "@/context/comments" @@ -104,6 +105,7 @@ const setSessionHandoff = (key: string, patch: Partial) => { } interface SessionReviewTabProps { + title?: JSX.Element diffs: () => FileDiff[] view: () => ReturnType["view"]> diffStyle: DiffStyle @@ -220,6 +222,7 @@ function SessionReviewTab(props: SessionReviewTabProps) { return ( { scroll = el props.onScrollRef?.(el) @@ -445,6 +448,8 @@ export default function Page() { const info = createMemo(() => (params.id ? sync.session.get(params.id) : undefined)) const diffs = createMemo(() => (params.id ? (sync.data.session_diff[params.id] ?? []) : [])) + const turnDiffs = createMemo(() => lastUserMessage()?.summary?.diffs ?? []) + const reviewDiffs = createMemo(() => (store.changes === "session" ? diffs() : turnDiffs())) const reviewCount = createMemo(() => Math.max(info()?.summary?.files ?? 0, diffs().length)) const hasReview = createMemo(() => reviewCount() > 0) const revertMessageID = createMemo(() => info()?.revert?.messageID) @@ -709,6 +714,7 @@ export default function Page() { messageId: undefined as string | undefined, turnStart: 0, mobileTab: "session" as "session" | "changes", + changes: "session" as "session" | "turn", newSessionWorktree: "main", promptHeight: 0, }) @@ -894,6 +900,7 @@ export default function Page() { () => { setStore("messageId", undefined) setStore("expanded", {}) + setStore("changes", "session") setUi("autoCreated", false) }, { defer: true }, @@ -1428,17 +1435,56 @@ export default function Page() { setFileTreeTab("all") } + const changesOptions = ["session", "turn"] as const + const changesOptionsList = [...changesOptions] + + const changesTitle = () => ( +