
    #iY                         d Z ddlmZ ddlmZ ddlmZ ddlmZmZ  G d de	e          Z
 G d d	e	e          Z G d
 de          Z G d de          Z G d de          ZdS )u   会话状态数据模型。    )datetime)Enum)Optional)	BaseModelFieldc                       e Zd ZdZdZdZdS )SessionModeu   会话运行模式。nlinteractiveN)__name__
__module____qualname____doc__NATURAL_LANGUAGEINTERACTIVE     3/root/projects/qq-shell/src/butler/session/state.pyr	   r	   
   s        KKKr   r	   c                   "    e Zd ZdZdZdZdZdZdS )PtyStateu   PTY 进程状态。idlerunningblockedunknownN)r   r   r   r   IDLERUNNINGBLOCKEDUNKNOWNr   r   r   r   r      s(        DGGGGGr   r   c                      e Zd ZU dZ edd          Zeed<    edd          Zeed<    ee	j
        d	          Ze	ed
<    edd	          Zeed<    eed          Zeeef         ed<    edd	          Zeed<    edd	          Zee         ed<    eej        d          Zeed<    eej        d          Zeed<    eej        d          Zeed<   ddZdefdZdS ) SessionStateu   会话状态快照。.u   tmux session 名称description
session_id   QQ 用户 IDuser_idu   当前模式defaultr"   mode u   当前工作目录pwdu   关键环境变量)default_factoryr"   envu   最近终端输出摘要last_outputNu&   当前交互进程名 (vim, top, etc.)interactive_processu   创建时间
created_atu   更新时间
updated_atu   最后活跃时间last_active_atreturnc                 f    t          j                    | _        t          j                    | _        dS )u   更新活跃时间。N)r   utcnowr0   r1   selfs    r   touchzSessionState.touch-   s'    "/++&o//r   c                 z    t          j                    | j        z
  }t          |                                          S )u   计算空闲秒数。)r   r4   r1   inttotal_seconds)r6   deltas     r   idle_secondszSessionState.idle_seconds2   s1    !!D$775&&(()))r   )r2   N)r   r   r   r   r   r#   str__annotations__r%   r	   r   r(   r*   dictr,   r-   r.   r   r   r4   r/   r0   r1   r7   r9   r<   r   r   r   r    r       s        eC-BCCCJCCC5.999GS999k&BP^___D+___uR-ABBBCBBB%BVWWWCc3hWWWuR5OPPPKPPP)."J* * *#    !5n]]]J]]] 5n]]]J]]]$uX_RfgggNHggg0 0 0 0
*c * * * * * *r   r    c                       e Zd ZU dZ edd          Zeed<    edd          Zeed<    edd          Z	eed	<    ed
d          Z
eed<    ed
d          Zeed<    edd          Zee         ed<   dS )MessageContextu   消息处理上下文。.u   消息唯一 IDr!   
message_idr$   r%      消息内容contentFu   是否以 / 开头r&   
is_commandu   危险命令标记requires_approvalNu   关联的会话状态session)r   r   r   r   r   rB   r=   r>   r%   rD   rE   boolrF   rG   r   r    r   r   r   rA   rA   8   s         ""eC->???J???5.999GS9995.999GS999uU8LMMMJMMM#eE?STTTtTTT&+eDF]&^&^&^GXl#^^^^^r   rA   c                   ,   e Zd ZU dZ edd          Zeed<    edd          Zeed<    edd          Z	e
ed	<    ed
d          Ze
ed<    edd          Zeed<    ed
d          Ze
ed<    ed
d          Ze
ed<   edefd            ZdS )NapCatEventu   NapCatQQ 事件格式。.u   事件时间戳r!   timeu   机器人 QQ 号self_idu   事件类型	post_typer)   u   消息类型r&   message_typer   u   发送者 IDr%   rC   messageu   原始消息raw_messager2   c                 .    | j         dk    o
| j        dk    S )u   是否是私聊消息。rO   private)rM   rN   r5   s    r   is_private_messagezNapCatEvent.is_private_messageO   s     ~*Mt/@I/MMr   N)r   r   r   r   r   rK   r9   r>   rL   rM   r=   rN   r%   rO   rP   propertyrH   rS   r   r   r   rJ   rJ   D   s#        ""c'8999D#9995*<===GS===U3N;;;Is;;;bnEEEL#EEE5???GS???5@@@GS@@@uR^DDDKDDDND N N N XN N Nr   rJ   N)r   r   enumr   typingr   pydanticr   r   r=   r	   r   r    rA   rJ   r   r   r   <module>rX      sK   ! !                   % % % % % % % %         #t          sD   * * * * *9 * * *<	_ 	_ 	_ 	_ 	_Y 	_ 	_ 	_N N N N N) N N N N Nr   