
    i?	                         d dl 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  e       Z G d de      Zej                  d	      d
        Zej#                  d	      defd       Zy)    N)Path)	APIRouterHTTPException)	BaseModelconstr)get_function_catalog)FUNCTION_CALLING_DIRc                   B    e Zd ZU  eddd      ed<   eed<   dZeed<   y	)
LocalToolCreateRequestT      )strip_whitespace
min_length
max_lengthfilenamecontentF	overwriteN)__name__
__module____qualname__r   __annotations__strr   bool     @/Users/bowang/.openclaw/workspace/ChatDev/server/routes/tools.pyr   r      s     dqSIILItr   r   z/api/tools/localc            	      t   t               } | j                         }g }|j                         D ]D  \  }}|j                  ||j                  |j
                  |j                  |j                  d       F |j                  d        dt        |      || j                  rt        | j                        dS d dS )N)namedescription
parametersmodule	file_pathc                     | d   S )Nr   r   )items    r   <lambda>z"list_local_tools.<locals>.<lambda>"   s    Vr   )keyT)successcounttools
load_error)r   list_metadataitemsappendr   parameters_schemamodule_namer"   sortlenr*   r   )catalogmetadatar)   r   metas        r   list_local_toolsr5      s    "$G$$&HEnn&
d#//"44**!^^	
 ' 
JJ,J-U181C1Cc',,-	  JN	 r   payloadc                    | j                   j                         }|st        dd      t        j                  d|      st        dd      |j                  d      r|n| d}t        t              j                         }|j                  dd       ||z  j                         }	 |j                  |       |j                         r| j                  st        d
d      |j                  | j                  d       t!               }|j#                          d|t%        |      |j&                  rt%        |j&                        dS d dS # t        $ r t        dd	      w xY w)Ni  zfilename is required)status_codedetailz^[A-Za-z0-9_-]+(\.py)?$z9filename must be alphanumeric with optional .py extensionz.pyT)parentsexist_okz2filename resolves outside function tools directoryi  ztool file already existszutf-8)encoding)r'   r   pathr*   )r   stripr   rematchendswithr   r	   resolvemkdirrelative_to
ValueErrorexistsr   
write_textr   r   refreshr   r*   )r6   raw_namer   	tools_dirtarget_pathr2   s         r   create_local_toolrL   +   sW   %%'H4JKK88.94opp#,,U3xH:S9IH)*224IOOD4O0x'002Kj	* G$5$54NOO7??W="$GOOK 181C1Cc',,-	  JN	   j4hiijs   )E E$)r?   pathlibr   fastapir   r   pydanticr   r   utils.function_catalogr   utils.function_managerr	   routerr   getr5   postrL   r   r   r   <module>rU      sn    	  , & 7 7	Y    .  5  !r   