
    id              	          U d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ  e
ej                  Z e            Z e            Zdaedz  ed<   defdZ ej        dd ej        d                    dej         dej!        de"e#ef         fd            Z$dS )u   主消息处理工作流。    N)Any)settings)SessionMode)TmuxWrapper)is_dangerous_commandget_danger_reason)SkillContextSkillRegistry)LogSkill)SystemSkill)inngest_client)session_prefix_skill_registryreturnc                      t           Lt                      a t                               t                     t                               t                     t           S )u1   延迟构建 skill registry 避免循环导入。)r   r
   register	log_skillsystem_skill     >/root/projects/qq-shell/src/butler/workflows/handle_message.py_get_skill_registryr      sA     '//  +++  ...r   zhandle-im-messagezHandle IM Messagez
im/message)event)fn_idnametriggerctxstepc                   K   | j         j                            dd          | j         j                            dd          | j         j                            dt          t	          j                                        }t          t                    st                    t          t                    st                    t          j                  s	dd ddS d	t          ffd
}|	                    d|           d{V d	t          ffd}|	                    d|           d{V }|t          j        k    rZd(fd}|	                    d|           d{V  d	t          ffd}|	                    d|           d{V }dd|dd         dS t                      }	|	                              rY                              }
t          i |
          |	                    dfd           d{V }ddj        |j        dS t          j        r\t'                    rMt)                    pd}|                    dt-          j        d||d                      d{V  d!d"|d#S d(fd$}|	                    d%|           d{V  d	t          ffd&}|	                    d|           d{V }t0                              |dd'                    dd"|dd         dS ))u   主消息处理流程。user_id content
message_idunauthorizedu   用户 u
    无权限)statusmessager   c                  <   K   t                                          S N)tmuxget_or_create_session)r    s   r   get_sessionz&handle_im_message.<locals>.get_session9   s      ))'222r   zget-or-create-sessionNc                  <   K   t                                          S r(   )r)   detect_modesession_names   r   detectz!handle_im_message.<locals>.detect?   s      ---r   zdetect-modec                  F   K   t                                d           d S )NFenterr)   	send_keysr"   r/   s   r   passthroughz&handle_im_message.<locals>.passthroughF   s%      NN<N>>>>>r   r7   c                  <   K   t                                          S r(   r)   capture_paner.   s   r   capturez"handle_im_message.<locals>.captureK   s      $$\222r   zcapture-outputsuccessinteractivei0)r%   modeoutput)r/   r    session_stateargszexecute-skillc                  .                                    S r(   )execute)skill	skill_ctxs   r   <lambda>z#handle_im_message.<locals>.<lambda>\   s    y9Q9Q r   rD   )r%   r>   
skill_namer?   u   潜在危险命令zsend-approval-requestzim/command-needs-approval)r    commandreasonr/   r#   )r   datapending_approvalnl)r%   r>   rI   c                  F   K   t                                d           d S )NTr2   r4   r6   s   r   rC   z"handle_im_message.<locals>.executer   s%      |WD99999r   zexecute-commandc                  <   K   t                                          S r(   r9   r.   s   r   capture_outputz)handle_im_message.<locals>.capture_outputw   s        ...r   i  )r   N)r   rJ   getstruuiduuid4
isinstancer   is_user_allowedrunr   INTERACTIVEr   find_matching
parse_argsr	   r   r?   guardrail_enabledr   r   
send_eventinngestEventr   log_command)r   r   r#   r+   r0   current_moder7   r;   r?   registryrA   resultrI   rC   rO   r"   r/   rD   rE   r    s                  @@@@@r   handle_im_messagerb   #   sQ      in  B//Gin  B//G##L#djll2C2CDDJ gs## g,,gs## g,, #G,, T(5Rw5R5R5RSSS3s 3 3 3 3 3 3 "9;GGGGGGGGL.+ . . . . . . -88888888L {...	? 	? 	? 	? 	? 	? 	? hh}k222222222	3s 	3 	3 	3 	3 	3 	3 xx 0'::::::::#]fUVVnUUU #$$H""7++E 	i(( %	
 
 
	 xx1Q1Q1Q1Q1QRRRRRRRR#WEJZ`Zghhh ! N&:7&C&C N"7++C/Coo#M0&&$$0", 	 	 	
 
 	
 	
 	
 	
 	
 	
 	
 -dfMMM: : : : : : : (($g
.
......../# / / / / / / 88,n========F'<&#,GGGHHHr   )%__doc__rR   typingr   r\   butler.configr   butler.sessionr   butler.session.wrapperr   butler.security.guardrailr   r   butler.skills.baser	   r
   butler.skills.log_skillr   butler.skills.system_skillr   butler.workflowsr   r   r)   r   r   r   __annotations__r   create_functionTriggerEventContextStepdictrQ   rb   r   r   r   <module>rs      s   ! ! !         " " " " " " & & & & & & . . . . . . M M M M M M M M : : : : : : : : , , , , , , 2 2 2 2 2 2 + + + + + +{("9:::HJJ	{}} )-% , , ,]      
	 G |444  
VI VI VIcSVh VI VI VI 
VI VI VIr   