
    c'
jo                        d Z ddlZddlZddlZddlmZ ddlmZ ej                  j                  dej                  j                  ej                  j                  e                   ddlmZ ej                  j                  d      Zej                  j                  d      Zd Zd	 Zdd
ZddZd Zedk(  r e        yy)u   
自动上传会话记录到本地向量记忆
- 每天 12:00 和 00:00 运行
- 记录每个文件已上传的字节偏移量，支持增量上传
- 提取对话内容，分块存储
    N)datetime)Path)
add_memoryz~/.hermes/sessionsz)~/.hermes/scripts/.uploaded_sessions.jsonc                      t         j                  j                  t              r/t	        t        d      5 } t        j                  |       cddd       S i ddS # 1 sw Y   xY w)u4   加载状态：{文件名: 已上传字节偏移量}rN)offsetslast_run)ospathexists
STATE_FILEopenjsonload)fs    4/home/ubuntu/.hermes/scripts/auto_upload_sessions.py
load_stater      sN    	ww~~j!*c" 	 a99Q<	  	 t,,	  	 s   AA!c                     t        t        d      5 }t        j                  | |dd       ddd       y# 1 sw Y   yxY w)u   保存状态w   F)indentensure_asciiN)r   r   r   dump)stater   s     r   
save_stater      s5    	j#	 :!		%159: : :s   4=c                    g }d}t        | dd      5 }|j                  |       |D ]  }	 t        j                  |j	                               }|j                  dd      }|dk(  r|j                  dd      }|r|dd	 }X|d
v r]|j                  dd      }	|	rt        |	      dk  rt        |	      dkD  r|	dd dz   }	|j                  d| d|	         |j                         }
ddd       ||
fS #  Y xY w# 1 sw Y   xY w)u'   从指定偏移量开始提取新消息Nr   zutf-8)encodingrole session_meta	timestamp
   )tooltool_resultcontent   i  z...[z]: )	r   seekr   loadsstripgetlenappendtell)filepathstart_offsetmessagessession_dater   linemsgr   tsr%   
new_offsets              r   extract_new_messagesr7   "   s,   HL	hg	. !!	| 	Djj.wwvr* >)b1B')#2w 22'')R0#g,"2 w<$&%etnu4G!D6WI 671	: VVX
C!F \:--=! !sG   C:AC3>C:?C3C:"C3&C:'-C3C:3C75C::Dc                    g }g }d}| D ]T  }t        |      }||z   |kD  r&|r$|j                  dj                  |             g }d}|j                  |       ||dz   z  }V |r |j                  dj                  |             |S )u   将消息分块r   
   )r,   r-   join)r1   max_chunk_sizechunkscurrent_chunkcurrent_sizer4   msg_sizes          r   chunk_messagesrA   L   s    FML %s8("^3MM$))M23MLS!1$% dii./M    c                     t        dt        j                          d       t               } | j	                  di       }t        t        t              j                  d            }d}d}d}|D ]  }|j                  }|j                         j                  }|j	                  |d      }	|	|k\  rA|dz  }	 t        ||	      \  }
}}t        |
      dk  r|||<   kt        |
      }t        |      D ](  \  }}d|xs d	 d
| d}||z   }	 t!        |       |dz  }* |||<   t        d| dt        |
       dt        |       d|	 d| d        || d<   t        j                         j%                         | d<   t'        |        |dk(  rt        d       y t        d| d| d| d       y # t"        $ r}t        d|        |dz  }Y d }~d }~ww xY w# t"        $ r!}t        d| d|        |dz  }Y d }~d }~ww xY w)Nr'   u   ] 开始自动上传会话...r   z*.jsonlr   r:   r   u   [会话日期: u   未知u   ] [文件: u   ] [增量上传]
u     添加记忆失败: u     ✓ z: +u    条消息, u    个分块 (offset: z -> )u     ✗ z: r	   u   没有新内容需要上传u   
完成！处理 u    个文件, 成功: u    块, 错误: u    块)printr   nowr   r+   sortedr   SESSIONS_DIRglobnamestatst_sizer7   r,   rA   	enumerater   	Exception	isoformatr   )r   r   session_filessuccess_counterror_countfiles_processedr/   filename	file_sizelast_offsetr1   r2   r6   r=   ichunkprefixmemory_contentes                      r   mainr\   `   sO   	Ahlln:
;<LEii	2&G 4-229=>MMKO! %==MMO++	kk(A. )#1	1EhP[1\.HlJ8}q $.!#H-F%f- 	%5*<+C8*DKPXzYkl!'%%~.!Q&M	% !+GHF8*CHl3v;-Ocdocpptu  uA  AB  C  DC%P E) 002E*u!+,"?"33GVdepdqquvw) ! %21#671$K%  	F8*Bqc*+1K	sH   4#G.GF)4G)	G2G
G
GG	G<G77G<__main__)r   )i  )__doc__r
   sysr   r   pathlibr   r   insertdirnameabspath__file__local_memoryr   
expanduserrH   r   r   r   r7   rA   r\   __name__ rB   r   <module>ri      s    
 
    277??277??8#<= > #ww!!"67WW KL
-:
(.T(<x| zF rB   