@@ -126,7 +126,7 @@ impl App {
126126 Ok ( response) => {
127127 if response. status ( ) . is_success ( ) || response. status ( ) . as_u16 ( ) == 405 {
128128 // 200 OK 或 405 Method Not Allowed 都表示服务可用
129- log:: info !( "服务可用,状态码: {}" , response. status( ) ) ;
129+ log:: debug !( "服务可用,状态码: {}" , response. status( ) ) ;
130130 self . ui . service_status = crate :: ui:: ServiceStatus :: Active ;
131131 } else {
132132 log:: warn!( "服务不可用,状态码: {}" , response. status( ) ) ;
@@ -176,8 +176,8 @@ impl App {
176176 let tick_rate = Duration :: from_millis ( 100 ) ;
177177
178178 loop {
179- // 更新日志
180- if last_log_update. elapsed ( ) > Duration :: from_secs ( 1 ) {
179+ // 更新日志(降低频率到每3秒一次,减少不必要的UI刷新)
180+ if last_log_update. elapsed ( ) > Duration :: from_secs ( 3 ) {
181181 self . update_logs ( ) ;
182182 last_log_update = Instant :: now ( ) ;
183183 }
@@ -197,13 +197,19 @@ impl App {
197197 if let Some ( last_msg) = self . ui . messages . last_mut ( ) {
198198 if last_msg. role == crate :: agent:: MessageRole :: Assistant {
199199 last_msg. content . push_str ( & chunk) ;
200+ // 只清除当前正在更新的消息的缓存
201+ let last_idx = self . ui . messages . len ( ) - 1 ;
202+ self . ui . invalidate_render_cache ( Some ( last_idx) ) ;
200203 } else {
201204 // 如果最后一条不是助手消息,创建新的助手消息
202205 self . ui . messages . push ( ChatMessage :: assistant ( chunk) ) ;
206+ // 新消息,清除所有缓存(因为索引会变化)
207+ self . ui . invalidate_render_cache ( None ) ;
203208 }
204209 } else {
205210 // 如果没有消息,创建新的助手消息
206211 self . ui . messages . push ( ChatMessage :: assistant ( chunk) ) ;
212+ self . ui . invalidate_render_cache ( None ) ;
207213 }
208214 // 确保自动滚动启用
209215 self . ui . auto_scroll = true ;
@@ -216,11 +222,16 @@ impl App {
216222 if let Some ( last_msg) = self . ui . messages . last_mut ( ) {
217223 if last_msg. role == crate :: agent:: MessageRole :: Assistant {
218224 last_msg. content = full_response;
225+ // 只清除当前正在更新的消息的缓存
226+ let last_idx = self . ui . messages . len ( ) - 1 ;
227+ self . ui . invalidate_render_cache ( Some ( last_idx) ) ;
219228 } else {
220229 self . ui . messages . push ( ChatMessage :: assistant ( full_response) ) ;
230+ self . ui . invalidate_render_cache ( None ) ;
221231 }
222232 } else {
223233 self . ui . messages . push ( ChatMessage :: assistant ( full_response) ) ;
234+ self . ui . invalidate_render_cache ( None ) ;
224235 }
225236 // 确保自动滚动启用
226237 self . ui . auto_scroll = true ;
@@ -292,9 +303,6 @@ impl App {
292303 self . dump_chats ( ) ;
293304 }
294305 }
295- crate :: ui:: KeyAction :: ShowBotManagement => {
296- // 机器人管理弹窗的显示由 UI 处理
297- }
298306 crate :: ui:: KeyAction :: CreateBot => {
299307 // 创建机器人的逻辑在 UI 中处理
300308 }
@@ -326,13 +334,13 @@ impl App {
326334
327335 log:: trace!( "状态检查: previous_state={:?}, current_state={:?}" , self . previous_state, self . ui. state) ;
328336
329-
337+
330338
331339 if self . previous_state != Some ( self . ui . state ) {
332340
333341 log:: info!( "🔄 状态变化: {:?} -> {:?}" , self . previous_state, self . ui. state) ;
334342
335-
343+
336344
337345 // 如果从 BotSelection 或 PasswordInput 切换到 Chat,启动 API 服务器
338346
@@ -348,7 +356,7 @@ impl App {
348356
349357 self . ui. state == crate :: ui:: AppState :: Chat ) ;
350358
351-
359+
352360
353361 if ( self . previous_state == Some ( crate :: ui:: AppState :: BotSelection )
354362
@@ -522,6 +530,7 @@ impl App {
522530 // 添加用户消息
523531 let user_message = ChatMessage :: user ( input_text) ;
524532 self . ui . messages . push ( user_message. clone ( ) ) ;
533+ self . ui . invalidate_render_cache ( None ) ;
525534 self . ui . clear_input ( ) ;
526535
527536 // 用户发送新消息,重新启用自动滚动
@@ -632,6 +641,7 @@ impl App {
632641 fn clear_chat ( & mut self ) {
633642 log:: info!( "清空会话" ) ;
634643 self . ui . messages . clear ( ) ;
644+ self . ui . invalidate_render_cache ( None ) ;
635645 self . ui . scroll_offset = 0 ;
636646 self . ui . auto_scroll = true ;
637647 }
@@ -657,11 +667,13 @@ impl App {
657667 log:: info!( "{}" , msg) ;
658668 let success_message = ChatMessage :: assistant ( msg) ;
659669 self . ui . messages . push ( success_message) ;
670+ self . ui . invalidate_render_cache ( None ) ;
660671 }
661672 Err ( e) => {
662673 log:: error!( "{}" , e) ;
663674 let error_message = ChatMessage :: assistant ( format ! ( "❌ {}" , e) ) ;
664675 self . ui . messages . push ( error_message) ;
676+ self . ui . invalidate_render_cache ( None ) ;
665677 }
666678 }
667679 self . ui . auto_scroll = true ;
@@ -824,6 +836,7 @@ impl App {
824836 // 添加用户消息到 UI
825837 let user_message = ChatMessage :: user ( content. clone ( ) ) ;
826838 self . ui . messages . push ( user_message. clone ( ) ) ;
839+ self . ui . invalidate_render_cache ( None ) ;
827840
828841 // 用户发送新消息,重新启用自动滚动
829842 self . ui . auto_scroll = true ;
@@ -928,11 +941,6 @@ impl App {
928941 Ok ( ( ) )
929942 }
930943
931- /// 获取外部消息发送器的克隆(用于 API server 发送消息)
932- pub fn get_external_message_sender ( & self ) -> mpsc:: UnboundedSender < String > {
933- self . external_message_sender . clone ( )
934- }
935-
936944 /// 保存机器人(创建或更新)
937945 async fn save_bot ( & mut self ) -> Result < ( ) > {
938946 let ( name, prompt, password) = self . ui . get_bot_input_data ( ) ;
0 commit comments