+
    jHàj‹  ã                  ó¦   € R t ^ RIHt ^ RIt^ RIHtHt ]P                  ! ]4      t	R R lt
R R ltR R	 ltR
 R ltR R ltR R ltR R ltR# )z@Hermes lifecycle dispatch for first-party observers and plugins.)ÚannotationsN)ÚAnyÚListc               ó$   € V ^8„  d   QhRRRRRR/# )é   Ú	hook_nameÚstrÚkwargsr   ÚreturnÚNone© )Úformats   "Ú9/home/ubuntu/.hermes/hermes-agent/hermes_cli/lifecycle.pyÚ__annotate__r      s&   € ÷ 
Lñ 
L˜ð 
L sð 
L¨tñ 
Ló    c                ó¢   € ^ RI Hp V! 4       '       d   R#  ^ RIHp V! V 3/ VB  R#   \         d    \
        P                  RRR7        R# i ; i)é    ©Úsafe_worker_enabledN)Úobserve_lifecyclez"Built-in observability hook failedT©Úexc_info)Úagent.safe_worker_policyr   Úhermes_cli.observabilityr   Ú	ExceptionÚloggerÚwarning)r   r	   r   r   s   &,  r   Ú_observer      sI   € Ý<á×ÒÙðLÝ>á˜)Ñ. vÔ.øÜô LÜ�‰Ð;Àdˆ×KðLús   —( ¨"AÁAc               ó$   € V ^8„  d   QhRRRRRR/# ©r   r   r   r	   r   r
   ú	list[Any]r   )r   s   "r   r   r      s!   € ÷ 4ñ 4˜Sð 4¨Cð 4°Iñ 4r   c                ó4   € ^ RI Hp VP                  ! V 3/ VB # )r   ©Úplugins)Ú
hermes_clir#   Úinvoke_hook©r   r	   r#   s   &, r   Ú_plugin_hooksr'      s   € Ý"à×Ò˜yÑ3¨FÑ3Ð3r   c               ó$   € V ^8„  d   QhRRRRRR/# r   r   )r   s   "r   r   r      s!   € ÷ .ñ .˜3ð .¨#ð .°)ñ .r   c                ó\   € ^ RI Hp V! 4       '       d   . # \        V 3/ VB  \        V 3/ VB # )zENotify first-party observers, then invoke compatibility plugin hooks.r   )r   r   r   r'   )r   r	   r   s   &, r   r%   r%      s0   € å<á×ÒØˆ	ÜˆYÑ!˜&Ò!Ü˜Ñ- fÑ-Ð-r   c               ó$   € V ^8„  d   QhRRRRRR/# r   r   )r   s   "r   r   r   (   s!   € ÷ ;ñ ; #ð ;°ð ;¸ñ ;r   c              ‹  óh   "  € \        V 3/ VB  ^ RIHp VP                  ! V 3/ VB G Rj  x€L
 #  L5i)z”:func:`invoke_hook` for callers on an event loop: same observers-then-plugins
composition, with ``async def`` plugin callbacks awaited on that loop.r"   N)r   r$   r#   Úainvoke_hookr&   s   &, r   r,   r,   (   s3   é € ô ˆYÑ!˜&Ò!Ý"à×%Ò% iÑ:°6Ñ:×:Ð:Ñ:ùs   ‚)2«0¬2c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r
   Úboolr   )r   s   "r   r   r   1   s   € ÷ 'ñ '˜ð ' ñ 'r   c                óÚ   € ^ RI Hp V! 4       '       d   R#  ^ RIHp V! V 4      '       d   R#  ^ RIHp VP                  V 4      #   \         d    \
        P                  RRR7        L;i ; i)z@Return whether a first-party observer or plugin consumes a hook.r   F)Úhandles_hookTz.Unable to inspect built-in observability hooksr   r"   )
r   r   r   r0   r   r   r   r$   r#   Úhas_hook)r   r   r0   r#   s   &   r   r1   r1   1   sh   € å<á×ÒÙðXÝ9á˜	×"Ò"Ùð #õ
 #à×Ñ˜IÓ&Ð&øô ô XÜ�‰ÐGÐRVˆÖWðXús   —A Á"A*Á)A*c               ó    € V ^8„  d   QhRRRR/# )r   Úresultsr   r
   z	list[str]r   )r   s   "r   r   r   D   s   € ÷ 
ñ 
 #ð 
¨)ñ 
r   c                ó   € . pT ;'       g    R F{  p\        V\        4      '       d   VP                  R4      MTp\        V\        4      '       g   KD  VP	                  4       '       g   K\  VP                  VP	                  4       4       K}  	  V# )u  User-facing text from ``on_session_finalize`` results: a non-empty ``str`` or ``{"message": str}``.

Surfaces show these out-of-band (CLI print, TUI system line, gateway chat send) â€” never as a model
turn. ``on_session_end`` is per-turn and stays observer-only.Úmessager   )Ú
isinstanceÚdictÚgetr   ÚstripÚappend)r3   ÚmessagesÚresultÚtexts   &   r   Úsession_end_messagesr>   D   sg   € ð
 €HØ—-�-˜R’-ˆÜ(2°6¼4×(@Ò(@ˆv�z‰z˜)Ô$ÀfˆÜ�dœC× Ô  T§Z¡Z§\¤\Ø�O‰O˜DŸJ™J›LÖ)ñ  ð €Or   c               ó    € V ^8„  d   QhRRRR/# )r   r	   r   r
   r    r   )r   s   "r   r   r   Q   s   € ÷ :ñ :˜sð : yñ :r   c                 ó:  € \        R/ V B  \        V P                  R4      ;'       g    R4      pV'       d3    ^ RIHp VP
                  P                  VP                  4       VR7       \        R/ V B #   \         d    \        P                  RRR7        L/i ; i)	zBNotify observers and hard-close one core-owned Relay conversation.Ú
session_idÚ )Úrelay_runtime)Úprofile_keyrA   z&Core Relay session finalization failedTr   )Úon_session_finalize)r   r   r8   ÚagentrC   ÚSESSION_COORDINATORÚfinalize_conversationÚcurrent_profile_keyr   r   r   r'   )r	   rA   rC   s   ,  r   Úfinalize_sessionrJ   Q   s‘   € äÑ- fÒ-ä�V—Z‘Z Ó-×3Ð3°Ó4€Jßð	TÝ+à×-Ñ-×CÑCØ)×=Ñ=Ó?Ø%ð Dô ô Ñ9°&Ñ9Ð9øô ô 	TÜ�N‰NÐCÈdˆNÖSð	Tús   ¹1A5 Á5"BÂB)Ú__doc__Ú
__future__r   ÚloggingÚtypingr   r   Ú	getLoggerÚ__name__r   r   r'   r%   r,   r1   r>   rJ   r   r   r   Ú<module>rQ      sE   ðÙ Få "ã ß à	×	Ò	˜8Ó	$€õ
Lõ4õ.õ;õ'õ&
÷:r   