
    d*j                        d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	  e	d          Z
e G d d                      Z G d	 d
          ZdS )u&  EventBus:世界事件的发布-订阅总线,感知从"轮询快照"变为"实时推送"。

可见性三档(docs/agent-runtime-v2.md §1.3):
- place:同地点全量感知;相邻地点收到"衰减版"(闻其声不见其形);
- global:全岛广播(惨叫/停电/钟声),可带方位提示;
- private:只投给指定收件人(如动作反馈)。

显著度 salience ∈ [0,1] 决定收件人是否被立即打断(由 Attention 层判定,总线只负责送达)。
总线不依赖 World 具体实现,通过 locator 回调解耦(单测可用字典桩)。
    )annotations)	dataclassfield)Callable)
get_loggerzruntime.busc                      e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   d
Zded<   dZded<    e	e
          Zded<   dZded<    e	e          Zded<   dS )Eventstretypecontent placeactorg        floatsim_tg333333?saliencescope)default_factory	list[str]tomuffleddictdataN)__name__
__module____qualname____annotations__r   r   r   r   r   r   listr   r   r   r        ./root/genesis-world/src/genesis/runtime/bus.pyr	   r	      s         JJJLLLEOOOOEOOOOEHEE$///B////Gt,,,D,,,,,,r    r	   c                  6    e Zd ZddZddZddZddZddZdS )EventBusoccupants_ofCallable[[str], list[str]]adjacent_ofreturnNonec                >    || _         || _        i | _        g | _        d S N)_occupants_of_adjacent_of_inboxestaps)selfr$   r&   s      r!   __init__zEventBus.__init__%   s&    
 *'<>35			r    agent_idr
   deliverCallable[[Event], None]c                    || j         |<   d S r*   )r-   )r/   r1   r2   s      r!   registerzEventBus.register/   s    ")hr    c                <    | j                             |d            d S r*   )r-   pop)r/   r1   s     r!   
unregisterzEventBus.unregister2   s     (D)))))r    eventr	   r   c                   | j         D ]8}	  ||           # t          $ r t                              d           Y 5w xY wg }|j        dk    r#|j        D ]}|                     |||           nN|j        dk    r;t          | j                  D ]$}||j	        k    r|                     |||           %n| 
                    |j                  D ]$}||j	        k    r|                     |||           %|j        rt          |j        |j        |j        |j	        |j        t!          d|j        dz
            d          }t%          |          |j	        hz  }|                     |j                  D ]J}| 
                    |          D ]2}||vr,|                     |||           |                    |           3Kt                              d|j        |j        d	d
         |j        |           |S )uI   投递事件,返回实际收到的 agent 列表(便于测试与日志)。u   tap 观察者异常(忽略)privateglobalg?g      ?r   )r   r   r   r   r   r   r   u   event[%s] %s @%s → %sN   )r.   	Exceptionlogger	exceptionr   r   _sendr   r-   r   r+   r   r   r	   r   r   maxr   setr,   adddebugr   )r/   r9   tap	deliveredaidweakseenadjs           r!   publishzEventBus.publish5   s@   9 	@ 	@C@E



 @ @ @  !>?????@!	;)##x 2 2

3y11112[H$$DM** 6 6%+%%JJsE95556 ))%+66 6 6%+%%JJsE9555} 	*5;U[#(;ek&)#u~/D&E&EWV V V 9~~5,,U[99 * *C#11#66 * *d?? JJsD)<<< HHSMMM* 	.U]3B3=OQVQ\^ghhhs   $>>rH   rG   c                    | j                             |          }|" ||           |                    |           d S d S r*   )r-   getappend)r/   rH   r9   rG   r2   s        r!   rA   zEventBus._sendU   sL    -##C((GENNNS!!!!! r    N)r$   r%   r&   r%   r'   r(   )r1   r
   r2   r3   r'   r(   )r1   r
   r'   r(   )r9   r	   r'   r   )rH   r
   r9   r	   rG   r   r'   r(   )r   r   r   r0   r5   r8   rL   rA   r   r    r!   r#   r#   $   sy        6 6 6 6* * * ** * * *   @" " " " " "r    r#   N)__doc__
__future__r   dataclassesr   r   typingr   genesis.obs.logging_setupr   r?   r	   r#   r   r    r!   <module>rU      s   	 	 # " " " " " ( ( ( ( ( ( ( (       0 0 0 0 0 0	M	"	" 
- 
- 
- 
- 
- 
- 
- 
-5" 5" 5" 5" 5" 5" 5" 5" 5" 5"r    