@@ -464,9 +464,7 @@ async def agentic_start(
464464 dir_display = f"<code>{ current_dir } /</code>"
465465
466466 safe_name = escape_html (user .first_name )
467- welcome_text = t (
468- "welcome" , self ._lang (), name = safe_name , dir = dir_display
469- )
467+ welcome_text = t ("welcome" , self ._lang (), name = safe_name , dir = dir_display )
470468 await update .message .reply_text (
471469 f"{ welcome_text } { sync_line } " ,
472470 parse_mode = "HTML" ,
@@ -476,12 +474,51 @@ async def agentic_new(
476474 self , update : Update , context : ContextTypes .DEFAULT_TYPE
477475 ) -> None :
478476 """Reset session, one-line confirmation."""
477+ old_session_id = context .user_data .get ("claude_session_id" )
478+
479479 context .user_data ["claude_session_id" ] = None
480480 context .user_data ["session_started" ] = True
481481 context .user_data ["force_new_session" ] = True
482482
483483 await update .message .reply_text (t ("session_reset" , self ._lang ()))
484484
485+ # Trigger background summarization of the old session
486+ if old_session_id and self .settings .enable_session_memory :
487+ memory_service = context .bot_data .get ("session_memory_service" )
488+ if memory_service :
489+ current_dir = context .user_data .get (
490+ "current_directory" , str (self .settings .approved_directory )
491+ )
492+ asyncio .create_task (
493+ self ._summarize_session_safe (
494+ memory_service ,
495+ old_session_id ,
496+ update .effective_user .id ,
497+ str (current_dir ),
498+ )
499+ )
500+
501+ async def _summarize_session_safe (
502+ self ,
503+ memory_service : Any ,
504+ session_id : str ,
505+ user_id : int ,
506+ project_path : str ,
507+ ) -> None :
508+ """Summarize session in background, logging errors instead of raising."""
509+ try :
510+ await memory_service .summarize_session (
511+ session_id = session_id ,
512+ user_id = user_id ,
513+ project_path = project_path ,
514+ )
515+ except Exception as e :
516+ logger .warning (
517+ "Background session summarization failed" ,
518+ session_id = session_id ,
519+ error = str (e ),
520+ )
521+
485522 async def agentic_status (
486523 self , update : Update , context : ContextTypes .DEFAULT_TYPE
487524 ) -> None :
@@ -507,7 +544,13 @@ async def agentic_status(
507544 pass
508545
509546 await update .message .reply_text (
510- t ("status" , self ._lang (), dir = dir_display , session = session_status , cost = cost_str )
547+ t (
548+ "status" ,
549+ self ._lang (),
550+ dir = dir_display ,
551+ session = session_status ,
552+ cost = cost_str ,
553+ )
511554 )
512555
513556 def _get_verbose_level (self , context : ContextTypes .DEFAULT_TYPE ) -> int :
@@ -526,7 +569,12 @@ async def agentic_verbose(
526569 if not args :
527570 current = self ._get_verbose_level (context )
528571 await update .message .reply_text (
529- t ("verbose_current" , lang , level = current , label = verbose_label (current , lang )),
572+ t (
573+ "verbose_current" ,
574+ lang ,
575+ level = current ,
576+ label = verbose_label (current , lang ),
577+ ),
530578 parse_mode = "HTML" ,
531579 )
532580 return
@@ -671,7 +719,9 @@ async def _on_stream(update_obj: StreamUpdate) -> None:
671719 # Collapse to first meaningful line, cap length
672720 first_line = text .split ("\n " , 1 )[0 ].strip ()
673721 if first_line :
674- tool_log .append ({"kind" : "text" , "detail" : first_line [:120 ]})
722+ tool_log .append (
723+ {"kind" : "text" , "detail" : first_line [:120 ]}
724+ )
675725
676726 # Throttle progress message edits to avoid Telegram rate limits
677727 now = time .time ()
@@ -870,7 +920,11 @@ async def agentic_document(
870920 max_size = 10 * 1024 * 1024
871921 if document .file_size > max_size :
872922 await update .message .reply_text (
873- t ("file_too_large" , lang , size = f"{ document .file_size / 1024 / 1024 :.1f} " )
923+ t (
924+ "file_too_large" ,
925+ lang ,
926+ size = f"{ document .file_size / 1024 / 1024 :.1f} " ,
927+ )
874928 )
875929 return
876930
@@ -1111,7 +1165,12 @@ async def agentic_repo(
11111165 session_badge = " · session resumed" if session_id else ""
11121166
11131167 await update .message .reply_text (
1114- t ("repo_switched" , lang , name = escape_html (target_name ), badges = f"{ git_badge } { session_badge } " ),
1168+ t (
1169+ "repo_switched" ,
1170+ lang ,
1171+ name = escape_html (target_name ),
1172+ badges = f"{ git_badge } { session_badge } " ,
1173+ ),
11151174 parse_mode = "HTML" ,
11161175 )
11171176 return
@@ -1127,7 +1186,9 @@ async def agentic_repo(
11271186 key = lambda d : d .name ,
11281187 )
11291188 except OSError as e :
1130- await update .message .reply_text (t ("repo_workspace_error" , lang , error = str (e )))
1189+ await update .message .reply_text (
1190+ t ("repo_workspace_error" , lang , error = str (e ))
1191+ )
11311192 return
11321193
11331194 if not entries :
0 commit comments