@@ -172,6 +172,7 @@ const IMAGE_ONLY_BOOTSTRAP_PROMPT =
172172const EMPTY_ACTIVITIES : OrchestrationThreadActivity [ ] = [ ] ;
173173const EMPTY_PROPOSED_PLANS : Thread [ "proposedPlans" ] = [ ] ;
174174const EMPTY_PROVIDERS : ServerProvider [ ] = [ ] ;
175+ const EMPTY_CHANGED_FILES_EXPANDED_BY_TURN_ID : Record < string , boolean > = { } ;
175176const EMPTY_PENDING_USER_INPUT_ANSWERS : Record < string , PendingUserInputDraftAnswer > = { } ;
176177
177178type ThreadPlanCatalogEntry = Pick < Thread , "id" | "proposedPlans" > ;
@@ -574,6 +575,7 @@ export default function ChatView(props: ChatViewProps) {
574575 ( ) => scopeThreadRef ( environmentId , threadId ) ,
575576 [ environmentId , threadId ] ,
576577 ) ;
578+ const routeThreadKey = useMemo ( ( ) => scopedThreadKey ( routeThreadRef ) , [ routeThreadRef ] ) ;
577579 const composerDraftTarget : ScopedThreadRef | DraftId =
578580 routeKind === "server" ? routeThreadRef : props . draftId ;
579581 const serverThread = useStore (
@@ -584,10 +586,17 @@ export default function ChatView(props: ChatViewProps) {
584586 ) ;
585587 const setStoreThreadError = useStore ( ( store ) => store . setError ) ;
586588 const markThreadVisited = useUiStateStore ( ( store ) => store . markThreadVisited ) ;
589+ const setThreadChangedFilesExpanded = useUiStateStore (
590+ ( store ) => store . setThreadChangedFilesExpanded ,
591+ ) ;
587592 const activeThreadLastVisitedAt = useUiStateStore ( ( store ) =>
593+ routeKind === "server" ? store . threadLastVisitedAtById [ routeThreadKey ] : undefined ,
594+ ) ;
595+ const changedFilesExpandedByTurnId = useUiStateStore ( ( store ) =>
588596 routeKind === "server"
589- ? store . threadLastVisitedAtById [ scopedThreadKey ( scopeThreadRef ( environmentId , threadId ) ) ]
590- : undefined ,
597+ ? ( store . threadChangedFilesExpandedById [ routeThreadKey ] ??
598+ EMPTY_CHANGED_FILES_EXPANDED_BY_TURN_ID )
599+ : EMPTY_CHANGED_FILES_EXPANDED_BY_TURN_ID ,
591600 ) ;
592601 const settings = useSettings ( ) ;
593602 const setStickyComposerModelSelection = useComposerDraftStore (
@@ -981,6 +990,16 @@ export default function ChatView(props: ChatViewProps) {
981990 [ openOrReuseProjectDraftThread ] ,
982991 ) ;
983992
993+ const handleSetChangedFilesExpanded = useCallback (
994+ ( turnId : TurnId , expanded : boolean ) => {
995+ if ( routeKind !== "server" ) {
996+ return ;
997+ }
998+ setThreadChangedFilesExpanded ( routeThreadKey , turnId , expanded ) ;
999+ } ,
1000+ [ routeKind , routeThreadKey , setThreadChangedFilesExpanded ] ,
1001+ ) ;
1002+
9841003 useEffect ( ( ) => {
9851004 if ( ! serverThread ?. id ) return ;
9861005 if ( ! latestTurnSettled ) return ;
@@ -3337,6 +3356,8 @@ export default function ChatView(props: ChatViewProps) {
33373356 activeThreadEnvironmentId = { activeThread . environmentId }
33383357 expandedWorkGroups = { expandedWorkGroups }
33393358 onToggleWorkGroup = { onToggleWorkGroup }
3359+ changedFilesExpandedByTurnId = { changedFilesExpandedByTurnId }
3360+ onSetChangedFilesExpanded = { handleSetChangedFilesExpanded }
33403361 onOpenTurnDiff = { onOpenTurnDiff }
33413362 revertTurnCountByUserMessageId = { revertTurnCountByUserMessageId }
33423363 onRevertUserMessage = { onRevertUserMessage }
0 commit comments