@@ -51,6 +51,11 @@ export class EnvironmentInputHandler
5151 ) : void {
5252 const { get, set } = context ;
5353
54+ // Check if this is the first environment_input event BEFORE adding the current message
55+ const existingSessionMessages = get ( messagesAtom ) [ sessionId ] || [ ] ;
56+ const isFirstEnvironmentInput =
57+ existingSessionMessages . filter ( ( msg ) => msg . role === 'environment' ) . length === 0 ;
58+
5459 const environmentMessage : Message = {
5560 id : event . id ,
5661 role : 'environment' ,
@@ -68,7 +73,7 @@ export class EnvironmentInputHandler
6873 } ;
6974 } ) ;
7075
71- if ( Array . isArray ( event . content ) && shouldUpdatePanelContent ( get , sessionId ) ) {
76+ if ( Array . isArray ( event . content ) ) {
7277 const imageContent = event . content . find (
7378 ( item ) : item is ChatCompletionContentPartImage =>
7479 typeof item === 'object' &&
@@ -83,26 +88,44 @@ export class EnvironmentInputHandler
8388
8489 if ( imageContent && imageContent . image_url ) {
8590 const currentPanelContent = get ( sessionPanelContentAtom ) ;
86- const sessionMessages = get ( messagesAtom ) [ sessionId ] || [ ] ;
87-
88- // Check if this is the first environment_input event in the session
89- const isFirstEnvironmentInput = sessionMessages . filter ( msg => msg . role === 'environment' ) . length === 0 ;
9091 const currentSessionPanel = currentPanelContent [ sessionId ] ;
9192
92- // Always show first environment_input (initialization screenshot) or update existing browser_vision_control panel
93- if ( isFirstEnvironmentInput || ( currentSessionPanel && currentSessionPanel . type === 'browser_vision_control' ) ) {
93+ // Common panel properties
94+ const basePanelContent = {
95+ title : event . description || 'Environment Screenshot' ,
96+ timestamp : event . timestamp ,
97+ originalContent : event . content ,
98+ environmentId : event . id ,
99+ } ;
100+
101+ let panelContent = null ;
102+
103+ if ( isFirstEnvironmentInput ) {
104+ // First environment input: always show as simple image
105+ panelContent = {
106+ ...basePanelContent ,
107+ type : 'image' ,
108+ source : imageContent . image_url . url ,
109+ } ;
110+ } else if (
111+ currentSessionPanel ?. type === 'browser_vision_control' ||
112+ shouldUpdatePanelContent ( get , sessionId )
113+ ) {
114+ // Update existing browser_vision_control panel or create new one
115+ panelContent = {
116+ ...basePanelContent ,
117+ type : 'browser_vision_control' ,
118+ source : null ,
119+ title : event . description || 'Browser Screenshot' ,
120+ } ;
121+ }
122+
123+ if ( panelContent ) {
94124 set ( sessionPanelContentAtom , ( prev ) => ( {
95125 ...prev ,
96- [ sessionId ] : {
97- type : 'browser_vision_control' ,
98- title : event . description || 'Browser Screenshot' ,
99- timestamp : event . timestamp ,
100- originalContent : event . content ,
101- environmentId : event . id ,
102- } ,
126+ [ sessionId ] : panelContent ,
103127 } ) ) ;
104128 }
105- // Skip update for other panel types to avoid duplicate Browser Screenshot rendering
106129 }
107130 }
108131 }
0 commit comments