
    i	                         d Z ddlmZmZ ddlmZmZ ddlmZm	Z	  G d de          Z
 G d de          Z G d	 d
e          Z G d d          ZdS )u   Skill 基类和注册表。    )ABCabstractmethod)AnyOptional)	BaseModelFieldc                       e Zd ZU dZ edd          Zeed<    edd          Zeed<    ee	d	          Z
e	eef         ed
<    eed	          Zee         ed<   dS )SkillContextu   Skill 执行上下文。.u   会话名称descriptionsession_nameu	   用户 IDuser_idu   会话状态default_factoryr   session_stateu   参数列表argsN)__name__
__module____qualname____doc__r   r   str__annotations__r   dictr   r   listr        1/root/projects/qq-shell/src/butler/skills/base.pyr
   r
   	   s         ""c~>>>L#>>>5+666GS666$)E$N$[$[$[M4S>[[[eDnMMMD$s)MMMMMr   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
d	          Ze
e	ef         ed
<   dS )SkillResultu   Skill 执行结果。.u   是否成功r   successu   输出内容outputu   额外元数据r   metadataN)r   r   r   r   r   r    boolr   r!   r   r   r"   r   r   r   r   r   r      s~         E#>:::GT:::%888FC888$uTGXYYYHd38nYYYYYr   r   c                       e Zd ZU dZeed<   eed<   g Zee         ed<   ede	de
fd            Zdedefd	Zdedee         fd
ZdS )	SkillBaseu   Skill 基类。namer   triggersctxreturnc                 
   K   dS )u   执行 Skill。Nr   )selfr(   s     r   executezSkillBase.execute!   s       	r   contentc                 r    |                                 }| j        D ]}|                    |          r dS dS )u!   检查是否匹配触发条件。TF)stripr'   
startswith)r+   r-   content_strippedtriggers       r   matcheszSkillBase.matches&   sH    "==??} 	 	G**733 ttur   c                     |                                 }| j        D ]\}|                    |          rE|t          |          d                                          }|r|                                c S g c S ]g S )u   从内容中解析参数。N)r/   r'   r0   lensplit)r+   r-   r1   r2   args_strs        r   
parse_argszSkillBase.parse_args.   s    "==??} 	 	G**733 +CLLMM:@@BB ,#>>+++++				
 	r   N)r   r   r   r   r   r   r'   r   r   r
   r   r,   r#   r3   r8   r   r   r   r%   r%      s         
IIIHd3i +    ^s t    	# 	$s) 	 	 	 	 	 	r   r%   c                   z    e Zd ZdZddZdeddfdZdedee         fdZ	d	edee         fd
Z
dee         fdZdS )SkillRegistryu   Skill 注册表。r)   Nc                     i | _         d S )N)_skillsr+   s    r   __init__zSkillRegistry.__init__=   s    -/r   skillc                 $    || j         |j        <   dS )u   注册 Skill。N)r<   r&   )r+   r?   s     r   registerzSkillRegistry.register@   s    #(UZ   r   r&   c                 6    | j                             |          S )u   获取指定名称的 Skill。)r<   get)r+   r&   s     r   rC   zSkillRegistry.getD   s    |%%%r   r-   c                 p    | j                                         D ]}|                    |          r|c S dS )u   查找匹配内容的 Skill。N)r<   valuesr3   )r+   r-   r?   s      r   find_matchingzSkillRegistry.find_matchingH   sF    \((** 	 	E}}W%% tr   c                 N    t          | j                                                  S )u%   列出所有注册的 Skill 名称。)r   r<   keysr=   s    r   list_skillszSkillRegistry.list_skillsO   s    DL%%''(((r   )r)   N)r   r   r   r   r>   r%   rA   r   r   rC   rF   r   rI   r   r   r   r:   r:   :   s        0 0 0 0)i )D ) ) ) )& & 3 & & & &S Xi-@    )T#Y ) ) ) ) ) )r   r:   N)r   abcr   r   typingr   r   pydanticr   r   r
   r   r%   r:   r   r   r   <module>rM      s   ! ! # # # # # # # #                 % % % % % % % %N N N N N9 N N NZ Z Z Z Z) Z Z Z       @) ) ) ) ) ) ) ) ) )r   