@@ -149,7 +149,7 @@ export const DiffOverlay: React.FC<DiffOverlayProps> = React.memo(({
149149 } ;
150150
151151 loadDiff ( ) ;
152- } , [ isOpen , sessionId , target , onClose ] ) ;
152+ } , [ isOpen , sessionId , target , filePath , onClose ] ) ;
153153
154154 const handleRefresh = useCallback ( async ( ) => {
155155 if ( ! sessionId || ! target ) return ;
@@ -172,6 +172,22 @@ export const DiffOverlay: React.FC<DiffOverlayProps> = React.memo(({
172172 setDiff ( allRes . data ?. diff ?? '' ) ;
173173 setStagedDiff ( stagedRes . data ?. diff ?? '' ) ;
174174 setUnstagedDiff ( unstagedRes . data ?. diff ?? '' ) ;
175+
176+ // Keep full-file rendering stable during refresh as well.
177+ const preferredRef = target . scope === 'untracked' ? 'WORKTREE' : 'HEAD' ;
178+ let sourceRes = await withTimeout (
179+ API . sessions . getFileContent ( sessionId , { filePath, ref : preferredRef , maxBytes : 1024 * 1024 } ) ,
180+ 15_000 ,
181+ 'Load file content'
182+ ) ;
183+ if ( ! sourceRes . success && preferredRef !== 'WORKTREE' ) {
184+ sourceRes = await withTimeout (
185+ API . sessions . getFileContent ( sessionId , { filePath, ref : 'WORKTREE' , maxBytes : 1024 * 1024 } ) ,
186+ 15_000 ,
187+ 'Load file content'
188+ ) ;
189+ }
190+ setFileSource ( sourceRes . success ? ( sourceRes . data ?. content ?? '' ) : '' ) ;
175191 } else {
176192 const response = await withTimeout ( API . sessions . getDiff ( sessionId , target ) , 15_000 , 'Load diff' ) ;
177193 if ( response . success && response . data ) {
@@ -196,7 +212,7 @@ export const DiffOverlay: React.FC<DiffOverlayProps> = React.memo(({
196212 } finally {
197213 setLoading ( false ) ;
198214 }
199- } , [ sessionId , target , onClose ] ) ;
215+ } , [ sessionId , target , filePath , onClose ] ) ;
200216
201217 const handleCopyPath = useCallback ( async ( ) => {
202218 if ( ! filePath ) return ;
0 commit comments