@@ -283,19 +283,9 @@ export const BladeInterface: React.FC<BladeInterfaceProps> = ({
283283 const mostRecentSession = sessions [ 0 ] ;
284284 const messages = await SessionService . loadSession ( mostRecentSession . sessionId ) ;
285285
286- const sessionMessages = messages . map ( ( msg , index ) => ( {
287- id : `restored-${ Date . now ( ) } -${ index } ` ,
288- role : msg . role ,
289- content :
290- typeof msg . content === 'string' ? msg . content : JSON . stringify ( msg . content ) ,
291- timestamp : Date . now ( ) - ( messages . length - index ) * 1000 ,
292- metadata :
293- msg . metadata && typeof msg . metadata === 'object'
294- ? ( msg . metadata as Record < string , unknown > )
295- : undefined ,
296- } ) ) ;
297-
298- sessionActions . restoreSession ( mostRecentSession . sessionId , sessionMessages ) ;
286+ const sessionMessages = SessionService . toUISafeMessages ( messages ) ;
287+
288+ sessionActions . restoreSession ( mostRecentSession . sessionId , sessionMessages , messages ) ;
299289 } catch ( error ) {
300290 logger . error ( '[BladeInterface] 继续会话失败:' , error ) ;
301291 sessionActions . addAssistantMessage ( '继续会话失败,开始新对话。' ) ;
@@ -308,19 +298,9 @@ export const BladeInterface: React.FC<BladeInterfaceProps> = ({
308298 if ( typeof otherProps . resume === 'string' && otherProps . resume !== 'true' ) {
309299 const messages = await SessionService . loadSession ( otherProps . resume ) ;
310300
311- const sessionMessages = messages . map ( ( msg , index ) => ( {
312- id : `restored-${ Date . now ( ) } -${ index } ` ,
313- role : msg . role ,
314- content :
315- typeof msg . content === 'string' ? msg . content : JSON . stringify ( msg . content ) ,
316- timestamp : Date . now ( ) - ( messages . length - index ) * 1000 ,
317- metadata :
318- msg . metadata && typeof msg . metadata === 'object'
319- ? ( msg . metadata as Record < string , unknown > )
320- : undefined ,
321- } ) ) ;
322-
323- sessionActions . restoreSession ( otherProps . resume , sessionMessages ) ;
301+ const sessionMessages = SessionService . toUISafeMessages ( messages ) ;
302+
303+ sessionActions . restoreSession ( otherProps . resume , sessionMessages , messages ) ;
324304 return ;
325305 }
326306
@@ -392,38 +372,9 @@ export const BladeInterface: React.FC<BladeInterfaceProps> = ({
392372 try {
393373 const messages = await SessionService . loadSession ( sessionId ) ;
394374
395- // 过滤并转换消息:只保留用户和助手的消息,过滤掉 tool 和 system 消息
396- const sessionMessages = messages
397- . filter ( ( msg ) => msg . role === 'user' || msg . role === 'assistant' )
398- . map ( ( msg , index ) => {
399- // 提取消息内容:如果是 ContentPart[] 数组,只提取文本部分
400- let content : string ;
401- if ( typeof msg . content === 'string' ) {
402- content = msg . content ;
403- } else if ( Array . isArray ( msg . content ) ) {
404- // 从 ContentPart[] 中提取文本
405- content = msg . content
406- . filter ( ( part ) : part is { type : 'text' ; text : string } => part . type === 'text' )
407- . map ( ( part ) => part . text )
408- . join ( '' ) ;
409- } else {
410- // 其他情况(不应该发生)
411- content = '' ;
412- }
375+ const sessionMessages = SessionService . toUISafeMessages ( messages ) ;
413376
414- return {
415- id : `restored-${ Date . now ( ) } -${ index } ` ,
416- role : msg . role ,
417- content,
418- timestamp : Date . now ( ) - ( messages . length - index ) * 1000 ,
419- metadata :
420- msg . metadata && typeof msg . metadata === 'object'
421- ? ( msg . metadata as Record < string , unknown > )
422- : undefined ,
423- } ;
424- } ) ;
425-
426- sessionActions . restoreSession ( sessionId , sessionMessages ) ;
377+ sessionActions . restoreSession ( sessionId , sessionMessages , messages ) ;
427378 appActions . closeModal ( ) ;
428379 } catch ( error ) {
429380 logger . error ( '[BladeInterface] Failed to restore session:' , error ) ;
0 commit comments