
    i@                        d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZ e G d d             Ze G d	 d
             ZddZddZddZy)z:Shared utilities and data structures for skills providers.    )annotationsN)	dataclassfield)Path)Anyc                  0    e Zd ZU dZded<   ded<   ded<   y)SkillFileInfoz(Information about a file within a skill.strpathintsizehashN)__name__
__module____qualname____doc____annotations__     w/Users/bowang/.openclaw/workspace/ChatDev/.venv/lib/python3.12/site-packages/fastmcp/server/providers/skills/_common.pyr	   r	      s    2
I
I
Ir   r	   c                  r    e Zd ZU dZded<   ded<   ded<   ded<    ee      Zd	ed
<    ee      Z	ded<   y)	SkillInfoz!Parsed information about a skill.r
   namedescriptionr   r   	main_file)default_factorylist[SkillFileInfo]fileszdict[str, Any]frontmatterN)
r   r   r   r   r   r   listr   dictr   r   r   r   r   r      s9    +
I
JN!&t!<E<"'"=K=r   r   c                   | j                  d      si | fS t        j                  d| dd       }|si | fS | dd|j                         z    }| d|j	                         z   d }i }|j                         j                  d      D ]  }d|v s|j                  d      \  }}}|j                         }|j                         }|j                  d      r|j                  d      s"|j                  d      r|j                  d      r|d	d
 }|j                  d      rb|j                  d      rQ|d	d
 j                  d      }	|	D 
cg c]2  }
|
j                         s|
j                         j                  d      4 }}
|||<    ||fS c c}
w )zParse YAML frontmatter from markdown content.

    Args:
        content: Markdown content potentially starting with ---

    Returns:
        Tuple of (frontmatter dict, remaining content)
    z---z
\n---\s*\n   N
:"'   [],z"')	
startswithresearchstartendstripsplit	partitionendswith)content	end_matchfrontmatter_text	remainingr   linekey_valueitemsitems              r   parse_frontmatterr@   !   s    e$7{ 		-5I7{q1y'8#89IMMO+-.I #%K &&(..t4$; NN3/MCE))+CKKME   %%..*=  %%..*=a $)<a))#.?DUut

++E2uU$K# 5& 	!!	 Vs   F!Fc                    t        j                         }t        | d      5 t        fdd      D ]  }|j	                  |        	 ddd       d|j                          S # 1 sw Y   xY w)zCompute SHA256 hash of a file.rbc                 &     j                  d      S )Ni    )read)fs   r   <lambda>z#compute_file_hash.<locals>.<lambda>Q   s    !&&,r   r   Nzsha256:)hashlibsha256openiterupdate	hexdigest)r   rH   chunkrE   s      @r   compute_file_hashrN   M   s`    ^^F	dD	Q.4EMM%  5 
 V%%'()) 
	s   &A$$A-c           
     $   g }t        | j                  d            D ]p  }|j                         s|j                  |       }|j	                  t        |j                         |j                         j                  t        |                   r |S )z%Scan a skill directory for all files.*)r   r   r   )
sortedrglobis_filerelative_toappendr	   as_posixstatst_sizerN   )	skill_dirr   	file_pathrel_paths       r   scan_skill_filesr\   V   sz    EIOOC01	 ,,Y7HLL!**,")11*95	 2 Lr   )r6   r
   returnztuple[dict[str, Any], str])r   r   r]   r
   )rY   r   r]   r   )r   
__future__r   rG   r.   dataclassesr   r   pathlibr   typingr   r	   r   r@   rN   r\   r   r   r   <module>rb      s\    @ "  	 (      > > >)"X*r   