1- import type { FileDiff , Project , UserMessage } from "@opencode-ai/sdk/v2"
1+ import type { Project , UserMessage , VcsFileDiff } from "@opencode-ai/sdk/v2"
22import { useDialog } from "@opencode-ai/ui/context/dialog"
33import { useMutation } from "@tanstack/solid-query"
44import {
@@ -68,7 +68,7 @@ type FollowupItem = FollowupDraft & { id: string }
6868type FollowupEdit = Pick < FollowupItem , "id" | "prompt" | "context" >
6969const emptyFollowups : FollowupItem [ ] = [ ]
7070
71- type ChangeMode = "git" | "branch" | "session" | " turn"
71+ type ChangeMode = "git" | "branch" | "turn"
7272type VcsMode = "git" | "branch"
7373
7474type SessionHistoryWindowInput = {
@@ -463,13 +463,6 @@ export default function Page() {
463463 if ( ! id ) return false
464464 return sync . session . history . loading ( id )
465465 } )
466- const diffsReady = createMemo ( ( ) => {
467- const id = params . id
468- if ( ! id ) return true
469- if ( ! hasSessionReview ( ) ) return true
470- return sync . data . session_diff [ id ] !== undefined
471- } )
472-
473466 const userMessages = createMemo (
474467 ( ) => messages ( ) . filter ( ( m ) => m . role === "user" ) as UserMessage [ ] ,
475468 emptyUserMessages ,
@@ -527,10 +520,19 @@ export default function Page() {
527520 deferRender : false ,
528521 } )
529522
530- const [ vcs , setVcs ] = createStore ( {
523+ const [ vcs , setVcs ] = createStore < {
524+ diff : {
525+ git : VcsFileDiff [ ]
526+ branch : VcsFileDiff [ ]
527+ }
528+ ready : {
529+ git : boolean
530+ branch : boolean
531+ }
532+ } > ( {
531533 diff : {
532- git : [ ] as FileDiff [ ] ,
533- branch : [ ] as FileDiff [ ] ,
534+ git : [ ] as VcsFileDiff [ ] ,
535+ branch : [ ] as VcsFileDiff [ ] ,
534536 } ,
535537 ready : {
536538 git : false ,
@@ -648,6 +650,7 @@ export default function Page() {
648650 } , desktopReviewOpen ( ) )
649651
650652 const turnDiffs = createMemo ( ( ) => lastUserMessage ( ) ?. summary ?. diffs ?? [ ] )
653+ const nogit = createMemo ( ( ) => ! ! sync . project && sync . project . vcs !== "git" )
651654 const changesOptions = createMemo < ChangeMode [ ] > ( ( ) => {
652655 const list : ChangeMode [ ] = [ ]
653656 if ( sync . project ?. vcs === "git" ) list . push ( "git" )
@@ -659,7 +662,7 @@ export default function Page() {
659662 ) {
660663 list . push ( "branch" )
661664 }
662- list . push ( "session" , " turn")
665+ list . push ( "turn" )
663666 return list
664667 } )
665668 const vcsMode = createMemo < VcsMode | undefined > ( ( ) => {
@@ -668,20 +671,17 @@ export default function Page() {
668671 const reviewDiffs = createMemo ( ( ) => {
669672 if ( store . changes === "git" ) return vcs . diff . git
670673 if ( store . changes === "branch" ) return vcs . diff . branch
671- if ( store . changes === "session" ) return diffs ( )
672674 return turnDiffs ( )
673675 } )
674676 const reviewCount = createMemo ( ( ) => {
675677 if ( store . changes === "git" ) return vcs . diff . git . length
676678 if ( store . changes === "branch" ) return vcs . diff . branch . length
677- if ( store . changes === "session" ) return sessionCount ( )
678679 return turnDiffs ( ) . length
679680 } )
680681 const hasReview = createMemo ( ( ) => reviewCount ( ) > 0 )
681682 const reviewReady = createMemo ( ( ) => {
682683 if ( store . changes === "git" ) return vcs . ready . git
683684 if ( store . changes === "branch" ) return vcs . ready . branch
684- if ( store . changes === "session" ) return ! hasSessionReview ( ) || diffsReady ( )
685685 return true
686686 } )
687687
@@ -749,13 +749,6 @@ export default function Page() {
749749 scrollToMessage ( msgs [ targetIndex ] , "auto" )
750750 }
751751
752- const sessionEmptyKey = createMemo ( ( ) => {
753- const project = sync . project
754- if ( project && ! project . vcs ) return "session.review.noVcs"
755- if ( sync . data . config . snapshot === false ) return "session.review.noSnapshot"
756- return "session.review.empty"
757- } )
758-
759752 function upsert ( next : Project ) {
760753 const list = globalSync . data . project
761754 sync . set ( "project" , next . id )
@@ -1156,7 +1149,6 @@ export default function Page() {
11561149 const label = ( option : ChangeMode ) => {
11571150 if ( option === "git" ) return language . t ( "ui.sessionReview.title.git" )
11581151 if ( option === "branch" ) return language . t ( "ui.sessionReview.title.branch" )
1159- if ( option === "session" ) return language . t ( "ui.sessionReview.title" )
11601152 return language . t ( "ui.sessionReview.title.lastTurn" )
11611153 }
11621154
@@ -1179,11 +1171,26 @@ export default function Page() {
11791171 </ div >
11801172 )
11811173
1174+ const createGit = ( input : { emptyClass : string } ) => (
1175+ < div class = { input . emptyClass } >
1176+ < div class = "flex flex-col gap-3" >
1177+ < div class = "text-14-medium text-text-strong" > { language . t ( "session.review.noVcs.createGit.title" ) } </ div >
1178+ < div class = "text-14-regular text-text-base max-w-md" style = { { "line-height" : "var(--line-height-normal)" } } >
1179+ { language . t ( "session.review.noVcs.createGit.description" ) }
1180+ </ div >
1181+ </ div >
1182+ < Button size = "large" disabled = { gitMutation . isPending } onClick = { initGit } >
1183+ { gitMutation . isPending
1184+ ? language . t ( "session.review.noVcs.createGit.actionLoading" )
1185+ : language . t ( "session.review.noVcs.createGit.action" ) }
1186+ </ Button >
1187+ </ div >
1188+ )
1189+
11821190 const reviewEmptyText = createMemo ( ( ) => {
11831191 if ( store . changes === "git" ) return language . t ( "session.review.noUncommittedChanges" )
11841192 if ( store . changes === "branch" ) return language . t ( "session.review.noBranchChanges" )
1185- if ( store . changes === "turn" ) return language . t ( "session.review.noChanges" )
1186- return language . t ( sessionEmptyKey ( ) )
1193+ return language . t ( "session.review.noChanges" )
11871194 } )
11881195
11891196 const reviewEmpty = ( input : { loadingClass : string ; emptyClass : string } ) => {
@@ -1193,31 +1200,10 @@ export default function Page() {
11931200 }
11941201
11951202 if ( store . changes === "turn" ) {
1203+ if ( nogit ( ) ) return createGit ( input )
11961204 return empty ( reviewEmptyText ( ) )
11971205 }
11981206
1199- if ( hasSessionReview ( ) && ! diffsReady ( ) ) {
1200- return < div class = { input . loadingClass } > { language . t ( "session.review.loadingChanges" ) } </ div >
1201- }
1202-
1203- if ( sessionEmptyKey ( ) === "session.review.noVcs" ) {
1204- return (
1205- < div class = { input . emptyClass } >
1206- < div class = "flex flex-col gap-3" >
1207- < div class = "text-14-medium text-text-strong" > { language . t ( "session.review.noVcs.createGit.title" ) } </ div >
1208- < div class = "text-14-regular text-text-base max-w-md" style = { { "line-height" : "var(--line-height-normal)" } } >
1209- { language . t ( "session.review.noVcs.createGit.description" ) }
1210- </ div >
1211- </ div >
1212- < Button size = "large" disabled = { gitMutation . isPending } onClick = { initGit } >
1213- { gitMutation . isPending
1214- ? language . t ( "session.review.noVcs.createGit.actionLoading" )
1215- : language . t ( "session.review.noVcs.createGit.action" ) }
1216- </ Button >
1217- </ div >
1218- )
1219- }
1220-
12211207 return (
12221208 < div class = { input . emptyClass } >
12231209 < div class = "text-14-regular text-text-weak max-w-56" > { reviewEmptyText ( ) } </ div >
0 commit comments