
    i	                     @   d Z ddlmZmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZmZmZ  ed      Zdadd
Z ed       G d d             Z ed       G d d             Zd	d	d	ddedee   dee   ded	z  dedef   d	z  ded	z  dd	fdZdedefdZdeeef   fdZy	)z3Registry helpers for pluggable workflow node types.    )	dataclassfield)AnyCallableDictType)register_node_schema)RegistryRegistryEntryRegistryError	node_typeFreturnNc                  2    t         sddlm}   | d       da y y )Nr   import_modulezruntime.node.builtin_nodesT)_BUILTINS_LOADED	importlibr   r   s    B/Users/bowang/.openclaw/workspace/ChatDev/runtime/node/registry.py_ensure_builtins_loadedr      s    +23	     T)slotsc                   X    e Zd ZU dZedz  ed<   dZeed<   dZedz  ed<   dZ	e
dz  ed<   y)NodeCapabilitiesNdefault_role_fieldFexposes_toolsresource_keyresource_limit)__name__
__module____qualname__r   str__annotations__r   boolr   r   int r   r   r   r      s7    %)d
)M4#L#*#!%NC$J%r   r   c                       e Zd ZU eed<   ee   ed<   ee   ed<    ee      Z	eed<   dZ
edef   dz  ed<   dZedz  ed	<   dd
dedeeef   dz  defdZy)NodeRegistrationname
config_clsexecutor_cls)default_factorycapabilitiesN.executor_factorysummary	subgraphscontextr0   r   c                b    | j                   r| j                  ||      S | j                  |      S )Nr/   )r-   r*   )selfr1   r0   s      r   build_executorzNodeRegistration.build_executor(   s2      ((I(FF  ))r   )r   r   r    r!   r"   r   r   r   r   r,   r-   r   r.   r   r4   r%   r   r   r'   r'      s~    
IS	s)%*;K%LL"L26hsCx(4/6GS4ZQU *c *c3h$9N *Z] *r   r'   )r,   r-   r.   r(   r)   r*   r,   r-   .r.   c                    | t         j                         v rt        d|  d      t        | |||xs
 t	               ||      }t         j                  | |       t        | ||       y )NzNode type 'z' already registered)r(   r)   r*   r,   r-   r.   )target)r)   r.   )node_registrynamesr   r'   r   registerr	   )r(   r)   r*   r,   r-   r.   entrys          r   register_node_typer;   .   sp     }""$$k$/CDEE!!7%5%7)E 4.*gFr   c                     t                t        j                  |       }|j                         }t	        |t
              st        d|  d      |S )NzRegistry entry 'z' is not a NodeRegistration)r   r7   getload
isinstancer'   r   )r(   r:   registrations      r   get_node_registrationrA   F   sJ    (,,T2E::<Ll$45.tf4OPQQr   c                      t                t        j                         D  ci c]  \  } }| |j                          c}} S c c}} w )N)r   r7   itemsr>   )r(   r:   s     r   iter_node_registrationsrD   O   s:    2?2E2E2GH2G;4D%**,2GHHHs   A)r   N)__doc__dataclassesr   r   typingr   r   r   r   schema_registryr	   utils.registryr
   r   r   r7   r   r   r   r'   r!   r;   rA   rD   r%   r   r   <module>rJ      s   9 ( , , 0 A A %   & & & * * *& -126G
G S	G s)	G
 #T)G sCx(4/G 4ZG 
G0 (8 Ic+;&;!< Ir   