
    it                     B   d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZ dd	lmZmZ d
dlmZ  ed       G d d             Z ed      Zdad%dZdddeded   ded   dedz  ddf
dZdedefdZdeeef   fdZdd d!ed"eddfd#Zg d$Z y)&z7Registry helpers for pluggable edge condition managers.    )	dataclass)import_module)AnyDictType)register_edge_condition_schema)RegistryRegistryEntryRegistryError)EdgeConditionConfigEdgeConditionTypeConfig   )EdgeConditionManagerConditionFactoryContext   )ExecutionContextT)slotsc                   P    e Zd ZU dZeed<   ed   ed<   ed   ed<   dZedz  ed<   y)	EdgeConditionRegistrationz5Registry entry describing a pluggable condition type.namer   
config_clsEdgeConditionManager[Any]manager_clsNsummary)__name__
__module____qualname____doc__str__annotations__r   r        M/Users/bowang/.openclaw/workspace/ChatDev/runtime/edge/conditions/registry.pyr   r      s0    ?
I.//122GS4Zr"   r   edge_condition_typeFreturnNc                  ,    t         st        d       da y y )Nz%runtime.edge.conditions.builtin_typesT)_BUILTINS_LOADEDr   r!   r"   r#   _ensure_builtins_loadedr(      s    => r"   )r   r   r   r   r   r   r   c                    | t         j                         v rt        d|  d      t        | |||      }t         j	                  | |       t        | ||       y)zARegister a manager class that encapsulates edge processing logic.Edge condition type 'z' already registered)r   r   r   r   )target)r   r   N)edge_condition_registrynamesr   r   registerr   )r   r   r   r   entrys        r#   register_edge_conditionr0   #   sc     &,,..3D69MNOO%	E $$T%$8"4JPr"   c                     t                t        j                  |       }|j                         }t	        |t
              st        d|  d      |S )z%Retrieve a registered condition type.zEntry 'z%' is not an EdgeConditionRegistration)r(   r,   getload
isinstancer   r   )r   r/   registrations      r#   get_edge_condition_registrationr6   7   sI    266t<E::<Ll$=>gdV+PQRRr"   c                      t                t        j                         D  ci c]  \  } }| |j                          c}} S c c}} w )z(Iterate over registered condition types.)r(   r,   itemsr3   )r   r/   s     r#   !iter_edge_condition_registrationsr9   A   s:    2I2O2O2QR2Q;4D%**,2QRRRs   A	conditionr   contextexecution_contextc                     t        | j                        }|j                  }|st        d| j                   d       || j                  ||      S )z8Instantiate the manager responsible for a specific edge.r*   z+' does not provide a manager implementation)r6   typer   r   config)r:   r;   r<   r5   r   s        r#   build_edge_condition_managerr@   G   sW     39>>BL**K#INN#33^_
 	
 y''2CDDr"   )r   r0   r6   r9   r@   )r%   N)!r   dataclassesr   	importlibr   typingr   r   r   schema_registryr   utils.registryr	   r
   r   "entity.configs.edge.edge_conditionr   r   baser   r   node.executorr   r   r,   r'   r(   r   r0   r6   r9   r@   __all__r!   r"   r#   <module>rJ      s   = ! # " " : A A [ ? -    ##89    Q
Q ./Q 12	Q
 4ZQ 
Q(# 2K S45N0N+O SE$E$E (E !	Er"   