@@ -348,6 +348,32 @@ async def _mount_files(self, ctx: ExecutionContext) -> list[dict[str, Any]]:
348348 )
349349 mounted_ids .add (key )
350350
351+ # Consolidate cross-session files into the chosen session (issue #34).
352+ # When files are uploaded in separate sessions (e.g. entity_id=null),
353+ # copy them into the execution session so subsequent requests can find them.
354+ if ctx .session_id and file_ref .session_id != ctx .session_id :
355+ try :
356+ await self .file_service .store_uploaded_file (
357+ session_id = ctx .session_id ,
358+ filename = file_info .filename ,
359+ content = content ,
360+ content_type = file_info .content_type ,
361+ )
362+ logger .info (
363+ "Consolidated cross-session file" ,
364+ source_session = file_ref .session_id ,
365+ target_session = ctx .session_id [:12 ],
366+ filename = file_info .filename ,
367+ )
368+ except Exception as e :
369+ logger .warning (
370+ "Failed to consolidate cross-session file" ,
371+ source_session = file_ref .session_id ,
372+ target_session = ctx .session_id [:12 ],
373+ filename = file_info .filename ,
374+ error = str (e ),
375+ )
376+
351377 logger .debug (
352378 "Mounted file for execution" ,
353379 session_id = file_ref .session_id ,
0 commit comments