@@ -9,7 +9,7 @@ import { get_checkpoint_path } from '../checkpoints-command/utils'
99import { PanelProvider } from '@/views/panel/backend/panel-provider'
1010import { dictionary } from '@shared/constants/dictionary'
1111import { WorkspaceProvider } from '@/context/providers/workspace/workspace-provider'
12- import { response_preview_promise_resolve } from './utils/preview/preview'
12+ import { get_response_preview_promise_resolve } from './utils/preview/preview'
1313import { get_diff_stats } from './utils/preview/diff-utils'
1414import { create_safe_path } from '@/utils/path-sanitizer'
1515import {
@@ -32,7 +32,6 @@ import {
3232import { parse_response } from './utils/clipboard-parser'
3333
3434let in_progress = false
35- let placeholder_created_at_for_update : number | undefined
3635
3736interface SavedEditorState {
3837 uri : string
@@ -84,7 +83,9 @@ export const apply_chat_response_command = (params: {
8483 return
8584 }
8685
87- if ( in_progress && ! response_preview_promise_resolve ) {
86+ const resolve_fn = get_response_preview_promise_resolve ( )
87+
88+ if ( in_progress && ! resolve_fn ) {
8889 return
8990 }
9091
@@ -94,26 +95,30 @@ export const apply_chat_response_command = (params: {
9495 response : chat_response ,
9596 is_single_root_folder_workspace
9697 } )
97- const is_relevant_files = clipboard_items . some (
98- ( item ) => item . type == 'relevant-files'
99- )
100-
101- if ( response_preview_promise_resolve && ! is_relevant_files ) {
98+ if ( resolve_fn ) {
10299 const history = params . panel_provider . response_history
103100
104- const new_item : ResponseHistoryItem = {
105- response : chat_response ,
106- raw_instructions : args ?. raw_instructions ,
107- created_at : Date . now ( ) ,
108- url : args ?. url ,
109- api_configuration : args ?. api_configuration
110- }
101+ let created_at_for_switch : number
111102
112- history . push ( new_item )
113- params . panel_provider . send_message ( {
114- command : 'RESPONSE_HISTORY' ,
115- history
116- } )
103+ if ( ! args ?. created_at ) {
104+ const new_item : ResponseHistoryItem = {
105+ response : chat_response ,
106+ raw_instructions : args ?. raw_instructions ,
107+ created_at : Date . now ( ) ,
108+ url : args ?. url ,
109+ api_configuration : args ?. api_configuration ,
110+ is_unviewed : true
111+ }
112+
113+ created_at_for_switch = new_item . created_at
114+ history . push ( new_item )
115+ params . panel_provider . send_message ( {
116+ command : 'RESPONSE_HISTORY' ,
117+ history
118+ } )
119+ } else {
120+ created_at_for_switch = args . created_at
121+ }
117122
118123 if ( params . panel_provider . preview_switch_choice_resolver ) {
119124 // The "switch preview" modal is already visible for a previous
@@ -129,8 +134,8 @@ export const apply_chat_response_command = (params: {
129134 params . panel_provider . preview_switch_choice_resolver = undefined
130135
131136 if ( choice == 'Switch' ) {
132- placeholder_created_at_for_update = new_item . created_at
133- response_preview_promise_resolve ( { accepted_files : [ ] } )
137+ args = { ... args , created_at : created_at_for_switch }
138+ resolve_fn ( { accepted_files : [ ] } )
134139 if ( ongoing_preview_cleanup_promise ) {
135140 await ongoing_preview_cleanup_promise
136141 }
@@ -141,10 +146,27 @@ export const apply_chat_response_command = (params: {
141146 }
142147
143148 in_progress = true
149+
150+ if ( args ?. created_at ) {
151+ const target_created_at = args . created_at
152+ const history = params . panel_provider . response_history
153+ const existing = history . find ( ( i ) => i . created_at === target_created_at )
154+ if ( existing && existing . is_unviewed !== false ) {
155+ existing . is_unviewed = false
156+ params . panel_provider . send_message ( {
157+ command : 'RESPONSE_HISTORY' ,
158+ history
159+ } )
160+ }
161+ }
162+
144163 let before_checkpoint : Checkpoint | undefined
145164 let saved_tab_groups : SavedTabGroups | undefined
146165
147166 try {
167+ const is_relevant_files = clipboard_items . some (
168+ ( i ) => i . type == 'relevant-files'
169+ )
148170 if ( ! is_relevant_files ) {
149171 // Save current tab groups before entering preview
150172 saved_tab_groups = {
@@ -167,6 +189,7 @@ export const apply_chat_response_command = (params: {
167189
168190 const has_valid_blocks =
169191 ( args ?. files_with_content && args . files_with_content . length > 0 ) ||
192+ ( args ?. relevant_files && args . relevant_files . length > 0 ) ||
170193 clipboard_items . some (
171194 ( item ) =>
172195 item . type == 'file' ||
@@ -314,41 +337,28 @@ export const apply_chat_response_command = (params: {
314337 }
315338 const history = params . panel_provider . response_history
316339
317- if ( placeholder_created_at_for_update ) {
318- const item_to_update = history . find (
319- ( i ) => i . created_at === placeholder_created_at_for_update
320- )
321- if ( item_to_update ) {
322- item_to_update . files = files_for_history
323- item_to_update . lines_added = total_lines_added
324- item_to_update . lines_removed = total_lines_removed
325- }
326- created_at_for_preview = placeholder_created_at_for_update
327- placeholder_created_at_for_update = undefined
328- } else {
329- const item_to_update =
330- args ?. created_at &&
331- history . find ( ( i ) => i . created_at === args . created_at )
332-
333- if ( item_to_update ) {
334- item_to_update . files = files_for_history
335- item_to_update . lines_added = total_lines_added
336- item_to_update . lines_removed = total_lines_removed
337- } else {
338- created_at_for_preview = Date . now ( )
339- const new_item : ResponseHistoryItem = {
340- response : preview_data . chat_response ,
341- raw_instructions : args ?. raw_instructions ,
342- created_at : created_at_for_preview ,
343- lines_added : total_lines_added ,
344- lines_removed : total_lines_removed ,
345- files : files_for_history ,
346- url : args ?. url ,
347- api_configuration : args ?. api_configuration
348- }
340+ const item_to_update =
341+ args ?. created_at &&
342+ history . find ( ( i ) => i . created_at === args . created_at )
349343
350- history . push ( new_item )
344+ if ( item_to_update ) {
345+ item_to_update . files = files_for_history
346+ item_to_update . lines_added = total_lines_added
347+ item_to_update . lines_removed = total_lines_removed
348+ } else {
349+ created_at_for_preview = Date . now ( )
350+ const new_item : ResponseHistoryItem = {
351+ response : preview_data . chat_response ,
352+ raw_instructions : args ?. raw_instructions ,
353+ created_at : created_at_for_preview ,
354+ lines_added : total_lines_added ,
355+ lines_removed : total_lines_removed ,
356+ files : files_for_history ,
357+ url : args ?. url ,
358+ api_configuration : args ?. api_configuration
351359 }
360+
361+ history . push ( new_item )
352362 }
353363
354364 params . panel_provider . send_message ( {
0 commit comments