+
    kHàj9k  ã                  ó$  a € 0 t $ R t^ RIHt ^ RIHt ^ RIHtHtHt ^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHtHtH t   ^ RI!H"t" Rt#]PJ                  PM                  ^ ]'! ]! ](4      PS                  4       PT                  ^,          4      4       ^ R
I+H,t,H-t- ^ RI.H/t/H0t0H1t1 ^ RI2H3t3H4t4 ^ RI5H6t6H7t8 ]Pr                  ! ]:4      t;Rt<^ t=Rt>Rt?Rt@RtARtBRtCRtDRtER`tFRtG0 RamtH]P’                  ! R4      tJ^xtK]L! RP›                  4       4      tN]Pž                  ! 4       tPR]QR&   ]P¤                  ! 4       tS]P¤                  ! 4       tT]L! 4       tUR]QR&   ]L! 4       tVR]QR&   ]L! 4       tWR]QR&   R  R! ltXR" R# ltYR$ R% ltZRbR& R' llt[R( R) lt\R* R+ lt]R,R-R.RR/RR0RR1RR2R/R3 R4 llt^Rc][R53RdR6 R73ReR8 R933t_R: R; lt` ! R< R=4      taRbR>R	/R? R@ llltbRA RB ltcRC RD ltdRE te]eRF RG l4       tf]eRH RI l4       tg]eRJ RK l4       th]eRL RM l4       ti]eRN RO l4       tj]eRP RQ l4       tk]eRR RS l4       tlRT RU ltm ! RV RW]/4      tnRX RY ltoRZ R[ ltpR\ R] ltqR^ R_ ltrR#   ]$ d	    R	t#Rt" ELi ; i)fa*  Raft channel platform adapter.

Runs a local wake endpoint, spawns ``raft agent bridge`` as a child process, and injects
content-free wake hints into the normal gateway session pipeline (token/port auto-generated
if unset). The bridge owns Raft message cursors/bodies; the agent uses the Raft CLI.
)Úannotations)Údeque)ÚdatetimeÚtimezoneÚUTCN)ÚPath)ÚAnyÚDequeÚDictÚListÚOptional)ÚwebTF)ÚPlatformÚPlatformConfig)ÚBasePlatformAdapterÚ
SendResultÚmerge_pending_message_event)ÚMessageEventÚMessageType)Úcoerce_portÚprofile_scopedú	127.0.0.1z/wakeÚdefaulti @  iô  i   zraft-activity.v1zraft-activity-drain.v1zx-raft-bridge-tokenz´Raft wake hint received. New Raft messages may be pending. If you have not read the Raft manual in this session, run `raft manual get raft-cli-overview` before using Raft commands.z^[a-zA-Z0-9._:@/ -]+$z�schema eventId sessionId hookEventName status occurredAt toolName toolInput toolOutput toolInputTruncated toolOutputTruncated truncated errorClass durationMszweakref.WeakSet[RaftAdapter]Ú_ACTIVE_ADAPTERSzset[str]Ú_RAFT_SESSION_IDSÚ_RAFT_TURN_IDSÚ_RAFT_PROMPT_TURN_IDSc               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "ÚC/home/ubuntu/.hermes/hermes-agent/plugins/platforms/raft/adapter.pyÚ__annotate__r$   L   s   € ÷ 	6ñ 	6˜sñ 	6ó    c                 óð   € \        4       '       d(    ^ RIHp  V ! R4      ;'       g    RP                  4       # \
        P                  P                  RR4      P                  4       #   \         d     R# i ; i)uÓ   Scope-aware ``RAFT_PROFILE``: a secondary multiplex profile configures Raft only via its own ``.env``
(secret scope) â€” ``os.environ`` would return the DEFAULT profile's value. Unscoped ``get_secret()`` raises.©Ú
get_secretÚRAFT_PROFILEÚ )Ú_profile_scopedÚagent.secret_scoper(   ÚstripÚ	ExceptionÚosÚenvironÚgetr'   s    r#   Ú_resolve_raft_profiler2   L   se   € ô ×Òð	Ý5Ù˜~Ó.×4Ð4°"×;Ñ;Ó=Ð=ô �:‰:�>‰>˜.¨"Ó-×3Ñ3Ó5Ð5øô ô 	Úð	ús   ’A& §A& Á&A5Á4A5c               ó   € V ^8„  d   QhRR/# )r   r   Úboolr!   )r"   s   "r#   r$   r$   X   s   € ÷ <ñ < ñ <r%   c                 ó\   € \        \        ;'       d    \        P                  ! R4      4      # )u™   Passive ``check_fn`` probe: intentionally silent â€” it runs on every
``load_gateway_config()``; ``create_adapter()`` warns when an adapter is requested.Úraft)r4   ÚAIOHTTP_AVAILABLEÚshutilÚwhichr!   r%   r#   Úcheck_raft_requirementsr:   X   s!   € ô Ô!×:Ð:¤f§l¢l°6Ó&:Ó;Ð;r%   c               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer   r   r4   r!   )r"   s   "r#   r$   r$   ^   s   € ÷ Wñ W˜cð W dñ Wr%   c                óf  € \        V \        4      '       dQ   \        ;QJ d*    R  V P                  4        4       F  '       g   K   R# 	  R# ! R  V P                  4        4       4      # \        V \        4      ;'       d5    \        ;QJ d    R V  4       F  '       g   K   R# 	  R# ! R V  4       4      # )c              3  ó¨   "  € T FH  w  r\        V4      P                  4       P                  4       \        9   ;'       g    \	        V4      x € KJ  	  R # 5i©N)r    r-   ÚlowerÚ_CONTENT_FIELD_NAMESÚ_has_content_field)Ú.0ÚkÚvs   &  r#   Ú	<genexpr>Ú%_has_content_field.<locals>.<genexpr>`   sA   é € ÐuÑgtÑ_cÐ_`”3�q“6—<‘<“>×'Ñ'Ó)Ô-AÑA×ZÐZÔEWÐXYÓEZÔZÓgtùs
   ‚;A¾ATFc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir?   )rB   )rC   Úitems   & r#   rF   rG   a   s   é € Ð*VÑPUÈÔ+=¸d×+CÐ+CÓPUùs   ‚)Ú
isinstanceÚdictÚanyÚitemsÚlist©r<   s   &r#   rB   rB   ^   s†   € Ü�%œ×Òß‹sÑuÐgl×grÑgrÔgtÓu�sŒsÐuŠsÐuˆsÑuÐgl×grÑgrÔgtÓuÓuÐuÜ�eœTÓ"×VÐV§s£sÑ*VÑPUÓ*V§s¤sÐV¢sÐV sÑ*VÑPUÓ*VÓ'VÐVr%   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r<   r   r   úOptional[str]r   r!   )r"   s   "r#   r$   r$   d   s!   € ÷ $ñ $˜ð $ mð $¸}ñ $r%   c                óÊ   € \        V \        4      ;'       dA    ^ \        V 4      u;8  ;'       d
    \        8*  Mu ;'       d    \        P                  V 4      pV'       d   V # T# )é    )rJ   r    ÚlenÚ_MAX_SCALAR_LENGTHÚ_SAFE_SCALAR_REÚmatch)r<   r   Úoks   && r#   Ú_safe_scalarrY   d   sI   € Ü	�Eœ3Ó	×	iÐ	i A¬¨E«
×$HÔ$HÔ6HÔ$H×	iÐ	iÌ_×MbÑMbÐchÓMi€Bßˆ5Ð#˜GÐ#r%   c               ó    € V ^8„  d   QhRRRR/# )r   r<   r   r   zOptional[tuple[str, bool]]r!   )r"   s   "r#   r$   r$   i   s   € ÷ ]ñ ]˜3ð ]Ð#=ñ ]r%   c                óà   € V f   R #  \        V \        4      '       d   T M\        P                  ! V RRR7      pT'       d   TR \
         \        T4      \
        8„  3# R #   \         d     R # i ; i)NFT)Úensure_asciiÚ	sort_keys)rJ   r    ÚjsonÚdumpsr.   ÚACTIVITY_CONTENT_CAPrT   )r<   Útexts   & r#   Ú_content_stringrb   i   so   € Ø‚}ÙðÜ" 5¬#×.Ò.‰u´D·J²J¸uÐSXÐdhÔ4iˆ÷ OSˆDÐ&Ô&Ð'¬¨T«Ô5IÑ)IÐJÐ\ÐX\Ð\øô ô Úðús   ˆ1A ÁA-Á,A-c               ó    € V ^8„  d   QhRRRR/# )r   r<   r   r   zOptional[int]r!   )r"   s   "r#   r$   r$   s   s   € ÷ ñ ˜ð  ñ r%   c                ó    € \        V \        \        34      '       d'   \        V \        4      '       g   \        V 4      ^ 8  d   R# \        V 4      # )rS   N)rJ   ÚintÚfloatr4   rO   s   &r#   Ú_duration_msrg   s   s7   € Ü�eœc¤5˜\×*Ò*¬j¸Ä×.EÒ.EÌÈUËÐVWÌÙÜˆu‹:Ðr%   ÚstatusrX   Ú	tool_nameÚ
tool_inputÚtool_outputÚerror_classÚduration_msc               ó<   € V ^8„  d   QhRRRRRRRRRRRRR	RR
RRR/	# )r   Úhook_event_namer    Ú
session_idr   rh   ri   rj   rk   rl   rm   r   údict[str, Any]r!   )r"   s   "r#   r$   r$   y   sQ   € ÷ ñ ¨Sð ¸cð È3ð Ðbeð Ø%(ðØ>AðØWZðà&)ðà5Cñr%   c                óü  € R \         RR\        P                  ! 4        2R\        VR4      ;'       g    RRT RVR8X  d   RMRR	\        P
                  ! \        4      P                  4       P                  R
R4      /pRV3RV33 F  w  rš\        V
4      ;p'       g   K  W¸V	&   K   	  \        V4      ;pe   WÈR&   RV3RV33 F7  w  rš\        V
4      ;p'       g   K  Vw  W‰&   pV'       g   K+  R;W‰ R2&   VR&   K9  	  V# )ÚschemaÚeventIdzhermes-Ú	sessionIdÚunknownÚhookEventNamerh   ÚerrorrX   Ú
occurredAtz+00:00ÚZÚtoolNameÚ
errorClassÚ
durationMsÚ	toolInputÚ
toolOutputTÚ	TruncatedÚ	truncated)ÚACTIVITY_EVENT_SCHEMAÚuuidÚuuid4rY   r   Únowr   Ú	isoformatÚreplacerg   rb   )ro   rp   rh   ri   rj   rk   rl   rm   ÚeventÚkeyÚrawÚsafeÚsafe_duration_msÚcontentÚwas_truncateds   $$$$$$$$       r#   Ú_make_activity_eventr�   y   s+  € ð &Ô'<¸iÈ7ÔSW×S]ÒS]ÓS_ÐR`ÐIaØ(¬,°zÀ9Ó*M×*ZÐ*ZÐQZØ,¨o¸xÐTZÐ^eÔTeÉÐkoØ)¬8¯<ª<¼Ó+<×+FÑ+FÓ+H×+PÑ+PÐQYÐ[^Ó+_ða€Eð ! )Ð,¨|¸[Ð.IÓJ‰ˆÜ Ó$Ð$ˆ4×$Ð$Ø�#‹Jñ Kô )¨Ó5Ð5ÐÒBØ.ˆlÑØ! :Ð.°¸{Ð0KÓL‰ˆÜ% cÓ*Ð*ˆ7×*Ð*Ø(/Ñ%ˆE‰J˜ß‰}Ø@DÐD�˜˜YÐ'Ñ(¨5°Ó+=ñ	 Mð
 €Lr%   za safe stringc                ó   € \        V 4      R J# r?   )rg   ©rE   s   &r#   Ú<lambda>r’   �   s   € ¤¨Q£°tÑ ;r%   za non-negative numberc                ó"   € \        V \        4      # r?   )rJ   r4   r‘   s   &r#   r’   r’   �   s   € Ì:ÐVWÔY]ÔK^r%   z	a booleanc               ó    € V ^8„  d   QhRRRR/# )r   r<   r   r   rq   r!   )r"   s   "r#   r$   r$   “   s   € ÷ ñ  Cð ¨Nñ r%   c                óº  € \        V \        4      '       g   \        R 4      hV P                  R4      \        8w  d   \        R4      h\        V 4      \        ,
          ;p'       d   \        R\        V4       R24      hR F2  p\        V P                  V4      4      '       d   K%  \        RV R24      h	  V P                  R4      R9  d   \        R4      h\         FR  w  r4pV FF  pV P                  V4      f   K  V! V P                  V4      4      '       d   K7  \        RV R
V 24      h	  KT  	  \        V 4      pVP                  R4      e   \        VR,          4      VR&   R Fp  pVP                  V4      pVe&   \        V\        4      '       g   \        RV R24      hVf   KC  \        V4      \        8”  g   KY  VR	\         Wb&   R;VR&   Wb R2&   Kr  	  V# )z activity event must be an objectrs   z!unsupported activity event schemazactivity event field z is not allowedzactivity event z  must be a safe non-empty stringrh   z&activity event status must be ok|errorNz	 must be r}   z must be a stringTr�   r€   )rt   ru   rw   ry   >   rX   rx   )r~   r   )rJ   rK   Ú
ValueErrorr1   r‚   ÚsetÚ_ACTIVITY_ALLOWED_FIELDSÚminrY   Ú_OPTIONAL_FIELD_RULESrg   r    rT   r`   )r<   rv   r‰   ÚkeysrX   Úwhatrˆ   r�   s   &       r#   Ú_validate_activity_eventr�   “   s·  € Ü�eœT×"Ò"ÜÐ;Ó<Ð<Ø‡y�y�ÓÔ3Ô3ÜÐ<Ó=Ð=Ü�e“*Ô7Õ7Ð7€wÖ7ÜÐ0´°W³°¸oÐNÓOÐOÛFˆÜ˜EŸI™I c›N×+Ô+Ü˜¨s¨eÐ3SÐTÓUÐUñ Gð ‡y�y�Ó /Ô1ÜÐAÓBÐBß/‰ˆ�$ÛˆCØ�y‰y˜‹~Ô)±"°U·Y±Y¸s³^×2DÔ2DÜ  ?°3°%°yÀÀÐ!GÓHÐHó ñ 0ô �‹K€EØ‡y�y�ÓÒ*Ü*¨5°Õ+>Ó?ˆˆlÑÛ*ˆØ—)‘)˜C“.ˆØÒ¤z°'¼3×'?Ò'?Ü˜¨s¨eÐ3DÐEÓFÐFØÔ¤3 w£<Ô2FÖ#FØ Ð!6Ô"6Ð7ˆE‰JØ<@Ð@ˆE�+Ñ ¨¨iÐ'8Ó!9ñ +ð €Lr%   c                  ó^   € ] tR t^°tRt]3R R lltR R ltRR R llt]	R R	 l4       t
R
tR# )ÚActivityQueuez@Bounded at-most-once queue for Raft external activity telemetry.c               ó   € V ^8„  d   QhRR/# )r   Úcapre   r!   )r"   s   "r#   r$   ÚActivityQueue.__annotate__³   s   € ÷ &ñ &˜Cñ &r%   c                	ó¶   € \        ^\        T;'       g    \        4      4      V n        \	        4       V n        ^ V n        \        P                  ! 4       V n	        R# ©é   N)
Úmaxre   ÚDEFAULT_ACTIVITY_QUEUE_CAPÚ_capr   Ú_eventsÚ_dropped_since_drainÚ	threadingÚLockÚ_lock)Úselfr¡   s   &&r#   Ú__init__ÚActivityQueue.__init__³   s=   € Ü˜œ3˜s×@Ð@Ô&@ÓAÓBˆŒ	Ü.3«gˆŒØ$%ˆÔ!Ü—^’^Ó%ˆŽ
r%   c               ó    € V ^8„  d   QhRRRR/# ©r   rˆ   rq   r   ÚNoner!   )r"   s   "r#   r$   r¢   ¹   s   € ÷ /ñ /˜.ð /¨Tñ /r%   c                	óh  € \        V4      pV P                  ;_uu_ 4        V P                  P                  V4       \	        V P                  4      V P
                  8”  d6   V P                  P                  4        V ;P                  ^,          un        KY   RRR4       R#   + '       g   i     R# ; ir¤   )r�   r­   r©   ÚappendrT   r¨   Úpopleftrª   )r®   rˆ   Ú	validateds   && r#   ÚpushÚActivityQueue.push¹   sn   € Ü,¨UÓ3ˆ	Ø�Z�Z‹ZØ�L‰L×Ñ 	Ô*Ü�d—l‘lÓ# d§i¡iÔ/Ø—‘×$Ñ$Ô&Ø×)Ò)¨QÕ.×)ð 0÷ �Z�ZŠZús    A5B Â B1	c               ó    € V ^8„  d   QhRRRR/# )r   Ú
max_eventsre   r   rq   r!   )r"   s   "r#   r$   r¢   Á   s   € ÷ Wñ W ð W¨nñ Wr%   c           
     	ó„  € \        ^\        T;'       g    ^È4      4      pV P                  ;_uu_ 4        \        \	        V\        V P                  4      4      4       Uu. uF  q0P                  P                  4       NK  	  ppV P                  ^ uqPn        RRR4       R\        RXRX/# u upi   + '       g   i     L!; i)r¥   Nrs   ÚeventsÚdropped)
r¦   re   r­   Úranger™   rT   r©   r¶   rª   ÚACTIVITY_DRAIN_SCHEMA)r®   r»   ÚlimitÚ_r½   r¾   s   &&    r#   ÚdrainÚActivityQueue.drainÁ   s–   € Ü�A”s˜:×,Ð,¨Ó-Ó.ˆØ�Z�Z‹ZÜ6;¼CÀÄsÈ4Ï<É<ÓGXÓ<YÔ6ZÓ[Ñ6Z°—l‘l×*Ñ*Ö,Ñ6ZˆFÐ[Ø15×1JÑ1JÈAÐ.ˆGÔ.÷ ð Ô/°¸6À9ÈgÐVÐVùò \÷ �Zús   ´+B/Á"B*ÂB/Â*B/Â/B?	c               ó   € V ^8„  d   QhRR/# )r   r   re   r!   )r"   s   "r#   r$   r¢   É   s   € ÷ %ñ %�cñ %r%   c                	ó’   € V P                   ;_uu_ 4        \        V P                  4      uuR R R 4       #   + '       g   i     R # ; ir?   )r­   rT   r©   ©r®   s   &r#   ÚsizeÚActivityQueue.sizeÈ   s#   € à�Z�Z‹ZÜ�t—|‘|Ó$÷ �Z�Z‹Zús	   •5µA	)r¨   rª   r©   r­   N)éÈ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r§   r¯   r¸   rÃ   ÚpropertyrÈ   Ú__static_attributes__r!   r%   r#   rŸ   rŸ   °   s,   † ÙJà"<÷ &õ/÷Wð ô%ó ô%r%   rŸ   Úforget_sessionc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rp   r   Úturn_idrÒ   r4   r   r³   r!   )r"   s   "r#   r$   r$   Î   s*   € ÷ 7ñ 7 Sð 7°3ð 7ÐRVð 7Ðcgñ 7r%   c               ó4  € \        V 4      \        V4      rC\        ;_uu_ 4        V'       d+   \        P                  V4       \        P                  V4       V'       d   V'       d   \
        P                  V4       R R R 4       R #   + '       g   i     R # ; ir?   )rY   Ú_RAFT_CONTEXT_LOCKr   Údiscardr   r   )rp   rÔ   rÒ   Úsafe_session_idÚsafe_turn_ids   &&$  r#   Ú_forget_raft_contextrÚ   Î   sZ   € Ü$0°Ó$<¼lÈ7Ó>S�\ß	Ö	ßÜ×"Ñ" <Ô0Ü!×)Ñ)¨,Ô7ßŸoÜ×%Ñ% oÔ6÷ 
×	×	Ò	ús   ¤:BÁBÁ'BÂB	c               ó    € V ^8„  d   QhRRRR/# )r   Úkwargsr   r   r4   r!   )r"   s   "r#   r$   r$   Ø   s   € ÷ Sñ S˜sð S tñ Sr%   c            	     ó&  € V P                  R4      p\        V P                  R4      4      \        V P                  R4      4      r2\        ;_uu_ 4        \        \	        VRV4      ;'       g    R4      R8X  dF   V'       d   \
        P                  V4       V'       d   \        P                  V4        RRR4       R# \        T;'       d    V\        9   ;'       g    T;'       d
    V\
        9   4      uuRRR4       #   + '       g   i     R# ; i)	zZTrue for Raft hook payloads; an explicit platform="raft" also learns the session/turn ids.Úplatformrp   rÔ   r<   r*   r6   NT)	r1   rY   rÖ   r    Úgetattrr   Úaddr   r4   )rÜ   rÞ   rØ   rÙ   s   ,   r#   Ú_is_raft_contextrá   Ø   sÎ   € à�z‰z˜*Ó%€HÜ$0°·±¸LÓ1IÓ$JÌLÐY_×YcÑYcÐdmÓYnÓLo�\ß	Ö	ÜŒw�x ¨(Ó3×9Ð9°rÓ:¸fÔDßÜ!×%Ñ% oÔ6ßÜ×"Ñ" <Ô0Ø÷ 
Ñ	ô �\×DÐD l´nÑ&D÷ Rð RØ'×PÐP¨OÔ?PÑ,PóS÷ 
×	×	Ó	ús0   Á-C?ÂC?ÂC?Â>C?ÃC?Ã	C?Ã'C?Ã?D	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   ro   r    rÜ   rq   Úfieldsr   r   r³   r!   )r"   s   "r#   r$   r$   ç   s(   € ÷ 'ñ '˜3ð '¨ð 'À#ð 'È$ñ 'r%   c           	     óè   € \        RRV RVP                  R4      /VB p\        ;_uu_ 4        \        \        4      pRRR4       X F  pVP                  V4       K  	  R#   + '       g   i     L,; i)zTBuild an activity event for the hook's session and fan it out to every live adapter.ro   rp   Nr!   )r�   r1   Ú_ACTIVE_ADAPTERS_LOCKrN   r   Úreport_activity)ro   rÜ   rã   rˆ   ÚadaptersÚadapters   &&,   r#   Ú_emitré   ç   s[   € ä Ñp°ÐpÈVÏZÉZÐXdÓMeÐpÐioÑp€Eß	Ö	ÜÔ(Ó)ˆ÷ 
ãˆØ×Ñ Ö&ó ÷ 
×	ús   ­A!Á!A1	c                óL   a € \         P                  ! S 4      R V 3R ll4       pV# )z)Run the hook body only for Raft sessions.c               ó    € V ^8„  d   QhRRRR/# ©r   rÜ   r   r   r³   r!   )r"   s   "r#   r$   Ú _raft_hook.<locals>.__annotate__ó   s   € ÷ ñ ˜#ð  $ñ r%   c                 ó>   <€ \        R/ V B '       d   S! R/ V B  R # R # )Nr!   )rá   )rÜ   Úfns   ,€r#   ÚwrapperÚ_raft_hook.<locals>.wrapperò   s   ø€ äÑ%˜f×%Ð%Ù‰L�ŒLñ &r%   )Ú	functoolsÚwraps)rï   rð   s   f r#   Ú
_raft_hookrô   ð   s%   ø€ ä‡_‚_�RÓ÷ó ðð €Nr%   c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$   ú   s   € ÷ "ñ " ð "¨ñ "r%   c                 óŽ   €  ^ RI Hp V! R.4       \        RV 4       R#   \         d    \        P	                  RRR7        L2i ; i)rS   )Úregister_env_passthroughr)   z6[raft] failed to register RAFT_PROFILE env passthroughT©Úexc_infoÚSessionStartN)Útools.env_passthroughr÷   r.   ÚloggerÚdebugré   )rÜ   r÷   s   , r#   Ú_on_session_startrþ   ù   sG   € ð^ÝBÙ  .Ð!1Ô2ô 
ˆ.˜&Ö!øô ô ^Ü�‰ÐMÐX\ˆÖ]ð^ús   ‚ Ÿ"AÁAc               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$     s   € ÷ &ñ &˜sð & tñ &r%   c                 ó  € \        V P                  R 4      4      ;p'       dC   \        ;_uu_ 4        V\        9   d    RRR4       R# \        P	                  V4       RRR4       \        RV 4       R#   + '       g   i     L; i)rÔ   NÚUserPromptSubmit)rY   r1   rÖ   r   rà   ré   )rÜ   rÙ   s   , r#   Ú_on_pre_llm_callr    s`   € ä# F§J¡J¨yÓ$9Ó:Ð:€|Ö:ßÖØÔ4Ô4Ø÷  Ñô "×%Ñ% lÔ3÷  ô 
Ð
˜fÖ%÷	  ×ús   ±A3ÁA3Á3B	c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$     s   € ÷ bñ b ð b¨ñ br%   c                 ó^   € \        R W P                  R4      V P                  R4      R7       R# )Ú
PreToolUseri   Úargs)ri   rj   N)ré   r1   ©rÜ   s   ,r#   Ú_on_pre_tool_callr    s!   € ä	ˆ,˜¯*©*°[Ó*AÈfÏjÉjÐY_ÓN`×ar%   c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$     s   € ÷ 1ñ 1 ð 1¨ñ 1r%   c                 óŒ  € V P                  R 4      R9   g   V P                  R4      '       d   RMRp\        VR8X  d   RMRYV P                  R4      V P                  R4      V P                  R4      ;'       g    V P                  R	4      V P                  R4      ;'       g    VR8X  d   R
MRV P                  R4      R7       R# )rh   rx   Ú
error_typerX   ÚPostToolUseFailureÚPostToolUseri   r  Úerror_messageÚresultÚtool_failureNrm   )rh   ri   rj   rk   rl   rm   >   rx   Úblocked)r1   ré   )rÜ   rh   s   , r#   Ú_on_post_tool_callr    sž   € àŸ
™
 8Ó,Ð0DÔDÈÏ
É
ÐS_×H`ÒH`‰WÐfj€FÜ	 &¨GÔ"3Ñ
¸ÈØ—J‘J˜{Ó+¸¿
¹
À6Ó8JØ—j‘j Ó1×IÐI°V·Z±ZÀÓ5IØ—j‘j Ó.×aÐaÀVÈwÔEV±>Ð\`Ø—j‘j Ó/÷	1r%   c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$     s   € ÷ ñ  ð ¨ñ r%   c                 ó   € \        R V 4       R# )ÚStopN)ré   r  s   ,r#   Ú_on_post_llm_callr    s   € ä	ˆ&�&Ör%   c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$   "  s   € ÷ Jñ J˜cð J dñ Jr%   c                 ó  € V P                  R 4      '       g   V P                  R4      RJ d)   \        RT RV P                  R 4      '       d   R MRR7       \        V P                  R4      V P                  R4      4       R	# )
ÚinterruptedÚ	completedFr  rx   Ú
incomplete)rh   rl   rp   rÔ   N)r1   ré   rÚ   r  s   ,r#   Ú_on_session_endr  !  s]   € à‡z�z�-× Ò  F§J¡J¨{Ó$;¸uÓ$DÜˆf�f WÈ6Ï:É:ÐVc×KdÒKd¹-ÐjvÕwÜ˜Ÿ™ LÓ1°6·:±:¸iÓ3HÖIr%   c               ó    € V ^8„  d   QhRRRR/# rì   r!   )r"   s   "r#   r$   r$   )  s   € ÷ _ñ _ 3ð _¨4ñ _r%   c                 óv   € \        R V 4       \        V P                  R4      V P                  R4      RR7       R# )Ú
SessionEndrp   rÔ   T)rÒ   N)ré   rÚ   r1   r  s   ,r#   Ú_on_session_finalizer   (  s+   € ä	ˆ,˜ÔÜ˜Ÿ™ LÓ1°6·:±:¸iÓ3HÐY]×^r%   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rx   r    rh   re   r   úweb.Responser!   )r"   s   "r#   r$   r$   .  s&   € ÷ Kñ K˜3ð K¨ð K°ñ Kr%   c                ó:   € \         P                  ! R RRV /VR7      # )rX   Frx   ©rh   )r   Újson_response)rx   rh   s   &&r#   Ú_error_responser&  .  s   € Ü×Ò˜d E¨7°EÐ:À6ÔJÐJr%   c                  óì   a € ] tR tRtRtR V 3R lltRR/R R lltR	 R
 ltR R ltR R lt	R$R R l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 R ltR V 3R  lltR! R" ltR#tV ;t# )%ÚRaftAdapteri2  z5Local HTTP endpoint for Raft channel bridge delivery.c               ó   € V ^8„  d   QhRR/# )r   Úconfigr   r!   )r"   s   "r#   r$   ÚRaftAdapter.__annotate__5  s   € ÷ /ñ /˜~ñ /r%   c                	ó"  <€ \         SV `  V\        R 4      4       VP                  ;'       g    / p\	        VP                  R\        4      4      V n        \        VP                  R\        4      4      V n
        \	        VP                  R\        4      ;'       g    \        4      P                  4       ;'       g    \        pVP                  R4      '       d   TMRV 2V n        \	        VP                  R4      ;'       g    R4      P                  4       V n        \	        VP                  R\         4      ;'       g    \         4      V n        \        VP                  R\$        4      4      V n        R	V n        R	V n        \-        4       V n        R	# )
r6   ÚhostÚportÚpathÚ/Úbridge_tokenr*   Úruntime_sessionÚmax_body_bytesN)Úsuperr¯   r   Úextrar    r1   ÚDEFAULT_HOSTÚ_hostre   ÚDEFAULT_PORTÚ_portÚDEFAULT_PATHr-   Ú
startswithÚ_pathÚ_bridge_tokenÚDEFAULT_RUNTIME_SESSIONÚ_runtime_sessionÚDEFAULT_MAX_BODY_BYTESÚ_max_body_bytesÚ_runnerÚ_bridge_processrŸ   Ú_activity_queue)r®   r*  r5  r/  Ú	__class__s   &&  €r#   r¯   ÚRaftAdapter.__init__5  s  ø€ Ü‰Ñ˜¤¨&Ó!1Ô2Ø—‘×"Ð" ˆÜ˜eŸi™i¨´Ó=Ó>ˆŒ
Ü˜eŸi™i¨´Ó=Ó>ˆŒ
Ü�5—9‘9˜V¤\Ó2×BÐB´lÓC×IÑIÓK×[Ð[Ì|ˆØ"&§/¡/°#×"6Ò"6™$¸aÀ¸v¸JˆŒ
ä"% e§i¡i°Ó&?×&EÐ&EÀ2Ó"F×"LÑ"LÓ"NˆÔÜ%(¨¯©Ð3DÔF]Ó)^×)yÐ)yÔbyÓ%zˆÔÜ$'¨¯	©	Ð2BÔDZÓ([Ó$\ˆÔØˆŒØ;?ˆÔÜ,›ˆÖr%   Úis_reconnectFc               ó    € V ^8„  d   QhRRRR/# )r   rG  r4   r   r!   )r"   s   "r#   r$   r+  D  s   € ÷ !ñ !¨Tð !¸dñ !r%   c             ƒ  	óþ  "  € V P                   '       g1   \        P                  ! ^ 4      V n         \        P	                  R4       \
        P                  ! V P                  R7      pVP                  P                  RV P                  4       VP                  P                  V P                  V P                  4       VP                  P                  RV P                  4       VP                  P                  RV P                  4       V P                   '       d–    \"        P"                  ! \"        P$                  \"        P&                  4      ;_uu_ 4       pVP)                  ^4       VP+                  RV P                   34       RRR4       \        P-                  RV P                   4       R	# \
        P2                  ! V4      V n        V P4                  P7                  4       G Rj  x€L
  \
        P8                  ! V P4                  V P:                  V P                   4      pVP=                  4       G Rj  x€L
  V P                   pV^ 8X  da   VP>                  '       dO   VP>                  P@                  '       d3   VP>                  P@                  ^ ,          PC                  4       ^,          pV PE                  4        \F        ;_uu_ 4        \H        PK                  V 4       RRR4       \        P	                  R
V P:                  WPP                  4       V PM                  V4       V PO                  R4       R#   + '       g   i     EL¼; i  \.        \0        3 d     EL±i ; i EL} EL2  + '       g   i     L‘; i5i)é    z"[raft] Auto-generated bridge token)Úclient_max_sizez/healthú	/activityú/activity/drainr   NzF[raft] Port %d already in use. Set platforms.raft.extra.port in configFz([raft] Raft channel listening on %s:%d%sT)(r=  ÚsecretsÚ	token_hexrü   Úinfor   ÚApplicationrA  ÚrouterÚadd_getÚ_handle_healthÚadd_postr<  Ú_handle_wakeÚ_handle_activityÚ_handle_activity_drainr9  ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚconnectrx   ÚConnectionRefusedErrorÚOSErrorÚ	AppRunnerrB  ÚsetupÚTCPSiter7  ÚstartÚ_serverÚsocketsÚgetsocknameÚ_mark_connectedrå   r   rà   Ú_spawn_bridgeÚ_wire_plugin_handlers)r®   rG  ÚappÚsockÚsiteÚ
bound_ports   &$    r#   r]  ÚRaftAdapter.connectD  sS  é € Ø×!×!Ð!Ü!(×!2Ò!2°2Ó!6ˆDÔÜ�K‰KÐ<Ô=ô �oŠo¨d×.BÑ.BÔCˆØ�
‰
×Ñ˜9 d×&9Ñ&9Ô:Ø�
‰
×Ñ˜DŸJ™J¨×(9Ñ(9Ô:Ø�
‰
×Ñ˜K¨×)>Ñ)>Ô?Ø�
‰
×ÑÐ,¨d×.IÑ.IÔJØ�:�:ˆ:ðÜ—]’]¤6§>¡>´6×3EÑ3E×FÔFÈ$Ø—O‘O AÔ&Ø—L‘L +¨t¯z©zÐ!:Ô;÷ Gô —‘ÐeÐgk×gqÑgqÔrÙô —}’} SÓ)ˆŒØ�l‰l× Ñ Ó"×"Ð"Ü�{Š{˜4Ÿ<™<¨¯©°T·Z±ZÓ@ˆØ�j‰j‹l×ÐØ—Z‘Zˆ
Ø˜Œ?˜tŸ|Ÿ|˜|°·±×0D×0DÐ0DØŸ™×-Ñ-¨aÕ0×<Ñ<Ó>¸qÕAˆJØ×ÑÔß"Ö"Ü× Ñ  Ô&÷ #ä�‰Ð>ÀÇ
Á
ÈJ×XbÑXbÔcØ×Ñ˜:Ô&Ø×"Ñ" 4Ô(Ù÷) G×FÐFûô
 +¬GÐ4ô Úðúò 	#â÷
 #×"üs‡   ‚DM=Ä;M Å/L8Æ(M Æ-:M=Ç'M$Ç(AM=È5M'È6(M=ÉM=É;AM=ËM*Ë!AM=Ì8M		Í	M ÍM!ÍM=Í M!Í!M=Í'M=Í*M:	Í5M=c               ó   € V ^8„  d   QhRR/# ©r   r   r³   r!   )r"   s   "r#   r$   r+  g  s   € ÷ +ñ + $ñ +r%   c              ƒ  	óp  "  € V P                  4        V P                  '       d*   V P                  P                  4       G R j  x€L
  R V n        \        ;_uu_ 4        \        P                  V 4       R R R 4       V P                  4        \        P                  R4       R #  L^  + '       g   i     L9; i5i)Nz[raft] Disconnected)	Ú_stop_bridgerB  Úcleanuprå   r   r×   Ú_mark_disconnectedrü   rP  rÇ   s   &r#   Ú
disconnectÚRaftAdapter.disconnectg  st   é € Ø×ÑÔØ�<�<ˆ<Ø—,‘,×&Ñ&Ó(×(Ð(ØˆDŒLß"Ö"Ü×$Ñ$ TÔ*÷ #à×ÑÔ!Ü�‰Ð)Ö*ñ )ç"×"üs*   ‚A B6ÁB!ÁB6ÁB#Á20B6Â#B3	Â.B6c               ó    € V ^8„  d   QhRRRR/# )r   r.  re   r   r³   r!   )r"   s   "r#   r$   r+  q  s   € ÷ >ñ > #ð >¨$ñ >r%   c           	     	óf  € \         P                  ! R 4      ;p'       g   \        P                  R4       R# \	        4       ;p'       g   \        P                  R4       R# RV P
                   RV V P                   2pVRVRRR	R
RV.	p^ RIHp / V! 4       CRVRV P                  /CpVR,          VR&    \        P                  ! WW\        P                  R7      V n        \        P                  RV P                  P                  W44       R#   \          d    \        P#                  R4        R# i ; i)r6   uP   [raft] raft CLI not found in PATH; bridge not spawned â€” wake-only polling modeNz/[raft] RAFT_PROFILE not set; bridge not spawnedzhttp://Ú:z	--profileÚagentÚbridgez--wake-adapterzwake-channelz--wake-channel-endpoint)Úhermes_subprocess_envr)   ÚRAFT_CHANNEL_TOKENÚHERMES_REAL_HOMEÚHOME)ÚenvÚstdinz3[raft] Spawned bridge pid=%d profile=%s endpoint=%sz[raft] Failed to spawn bridge)r8   r9   rü   Úwarningr2   r7  r<  Útools.environments.localr|  r=  Ú
subprocessÚPopenÚDEVNULLrC  rP  Úpidr.   Ú	exception)r®   r.  Úraft_binÚprofileÚendpointÚcmdr|  r€  s   &&      r#   rh  ÚRaftAdapter._spawn_bridgeq  s  € Ü"ŸLšL¨Ó0Ð0�Ö0Ü�N‰NÐmÔnÙÜ0Ó2Ð2�Ö2Ü�N‰NÐLÔMÙØ˜TŸZ™Z˜L¨¨$¨°·
±
¨|Ð<ˆØ" K°¸'À8ÐM]Ð_mØ3°Xð?ˆåBàlÑ&Ó(Ðl¨.¸'ÐCWÐY]×YkÑYkÑlˆØÐ,Õ-ˆˆF‰ð	>Ü#-×#3Ò#3°CÌ
×HZÑHZÔ#[ˆDÔ Ü�K‰KÐMÈt×OcÑOc×OgÑOgÐipÖ{øÜô 	>Ü×ÑÐ<×=ð	>ús   Â4AD Ä D0Ä/D0c               ó   € V ^8„  d   QhRR/# rp  r!   )r"   s   "r#   r$   r+  …  s   € ÷ =ñ =˜dñ =r%   c                	óš  € V P                   R uqn         Vf   R #  VP                  4        VP                  ^R7       \        P	                  RVP
                  4       R #   \        P                   d5    TP                  4        \        P                  RTP
                  4        R # \         d    \        P                  R4        R # i ; i)N)Útimeoutz)[raft] Bridge process terminated (pid=%d)z3[raft] Bridge process killed after timeout (pid=%d)z[raft] Error stopping bridge)rC  Ú	terminateÚwaitrü   rP  r‡  r„  ÚTimeoutExpiredÚkillr‚  r.   rˆ  )r®   Úprocs   & r#   rr  ÚRaftAdapter._stop_bridge…  s™   € Ø%)×%9Ñ%9¸4Ð"ˆÔ"ØŠ<Ùð	=Ø�N‰NÔØ�I‰I˜aˆIÔ Ü�K‰KÐCÀTÇXÁXÖNøÜ×(Ñ(ô 	\Ø�I‰IŒKÜ�N‰NÐPÐRV×RZÑRZ×[Üô 	=Ü×ÑÐ;×<ð	=ús   ›AA ÁAC
Â'C
Â0C
Ã	C
c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Úchat_idr    r�   Úreply_torQ   ÚmetadatazOptional[dict[str, Any]]r   r   r!   )r"   s   "r#   r$   r+  “  s1   € ÷ (ñ ( #ð (°ð (¸}ð (Ø5ð(ØAKñ(r%   c              ƒ  	óL   "  € \         P                  R 4       \        RR7      # 5i)z;[raft] adapter send is a no-op; agent delivers via raft CLIT)Úsuccess)rü   rý   r   )r®   r˜  r�   r™  rš  s   &&&&&r#   ÚsendÚRaftAdapter.send“  s   é € ä�‰ÐRÔSÜ $Ô'Ð'ùs   ‚"$c               ó    € V ^8„  d   QhRRRR/# )r   r˜  r    r   rq   r!   )r"   s   "r#   r$   r+  ˜  s   € ÷ ;ñ ;¨3ð ;°>ñ ;r%   c              ƒ  	ó   "  € R RV 2RR/# 5i)Únamezraft/Útyper6   r!   )r®   r˜  s   &&r#   Úget_chat_infoÚRaftAdapter.get_chat_info˜  s   é € Ø˜% ˜yÐ)¨6°6Ð:Ð:ùs   ‚
c               ó    € V ^8„  d   QhRRRR/# ©r   Úrequestúweb.Requestr   r"  r!   )r"   s   "r#   r$   r+  ›  s   € ÷ qñ q¨Kð q¸Lñ qr%   c           
   ƒ  	ó’   "  € R V P                   P                  RRRR/p\        P                  ! RRRRR	V P                  R
V/4      # 5i)Ú	queueSizer‹  rL  ÚdrainEndpointrM  rh   rX   rÞ   r6   ÚruntimeSessionÚactivity)rD  rÈ   r   r%  r?  )r®   r§  r­  s   && r#   rT  ÚRaftAdapter._handle_health›  sW   é € Ø ×!5Ñ!5×!:Ñ!:¸JÈÐUdÐfwÐxˆÜ× Ò Ø�t˜Z¨Ð1AÀ4×CXÑCXÐZdÐfnÐoóqð 	qùs   ‚AAc               ó    € V ^8„  d   QhRRRR/# )r   r§  r¨  r   r4   r!   )r"   s   "r#   r$   r+     s   € ÷ wñ w ;ð w°4ñ wr%   c                	ó
  € VP                   P                  \        R 4      p\        V P                  ;'       d    T4      ;'       d>    \
        P                  ! VP                  4       V P                  P                  4       4      # )r*   )Úheadersr1   ÚBRIDGE_TOKEN_HEADERr4   r=  ÚhmacÚcompare_digestÚencode)r®   r§  Útokens   && r#   Ú_authorizedÚRaftAdapter._authorized   s]   € Ø—‘×#Ñ#Ô$7¸Ó<ˆä�D×&Ñ&×0Ð0¨5Ó1×vÐv´d×6IÒ6IÈ%Ï,É,Ë.ÐZ^×ZlÑZl×ZsÑZsÓZuÓ6vÐvr%   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r§  r¨  ra   r4   r   z"tuple[Any, Optional[web.Response]]r!   )r"   s   "r#   r$   r+  ¥  s"   € ÷ ñ ¨{ð ÀTð ÐNpñ r%   c             ƒ  óv  "  € V P                  V4      '       g   R\        RR4      3# VP                  ;'       g    ^ V P                  8”  d   R\        RR4      3#  V'       d   VP	                  4       MVP                  4       G Rj  x€L
 pT'       d   \        TP                  R4      4      M
\        T4      T P                  8”  d   R\        RR4      3# TR3#  LR  \        P                   d    R\        RR4      3u # \         d,   pR\        T'       d   \        T4      MRR4      3u Rp?# Rp?ii ; i5i)	z¿Auth + size-capped body read for wake/activity -> ``(body, None)`` or ``(None, error)``.
``text=True``: ``request.text()``, utf-8 length check, exception text in the 400 body; else raw bytes.NÚunauthorizedé‘  Úpayload_too_largei�  Úbad_requesté�  zutf-8)r·  r&  Úcontent_lengthrA  ra   Úreadr   ÚHTTPRequestEntityTooLarger.   r    rT   rµ  )r®   r§  ra   ÚbodyÚexcs   &&$  r#   Ú_read_bridge_bodyÚRaftAdapter._read_bridge_body¥  s  é € ð ×Ñ ×(Ò(Øœ¨¸Ó=Ð=Ð=Ø×"Ñ"×'Ð' a¨4×+?Ñ+?Ô?ØœÐ)<¸cÓBÐBÐBð	Sß,0˜'Ÿ,™,œ.°g·l±l³n×EˆD÷ *.ŒC�—‘˜GÓ$Ô%´3°t³9À×@TÑ@TÔTØœÐ)<¸cÓBÐBÐBØ�TˆzÐñ FøÜ×,Ñ,ô 	CàœÐ)<¸cÓBÐBÒBÜô 	SØœ·T¬¨S¬¸}ÈcÓRÐRÕRûð	Süsk   ‚8D9» D9ÁC Á$#C ÂCÂC ÂD9ÂAD9ÃC Ã#D6Ã?D9ÄD6Ä
D6Ä D1Ä+D6Ä,D9Ä1D6Ä6D9c               ó    € V ^8„  d   QhRRRR/# r¦  r!   )r"   s   "r#   r$   r+  ¸  s   € ÷ dñ d¨+ð d¸,ñ dr%   c           	   ƒ  	óP  a"  € V P                  VR R7      G Rj  x€L
 w  r#Ve   V#  VP                  4       '       d   \        P                  ! V4      M/ o\        S\        4      '       g   \        RR4      # \        S4      '       d   \        RR4      # RR RR	R
T P                  /pT P                  '       g.   \        P                  R4       \        P                  ! TRR7      # \        \!        T3R l\"         4       R4      ;'       g)    R\%        \&        P&                  ! 4       R,          4       24      pT P)                  T P                  RRRRR7      p\+        \,        \.        P0                  TSTRR7      p T P3                  T4      G Rj  x€L
  \        P                  ! RRR
T P                  /^ÊR7      #  EL¢  \        P                   d    \        RR4      u # i ; i LT  \4         d1    \        P7                  R4       \        P                  ! TRR7      u # i ; i5i)F©ra   NÚinvalid_jsonr¿  Úinvalid_payloadÚcontent_not_allowedrX   rx   Ú	not_readyr¬  z@[raft] Wake received before gateway message handler was attachedi÷  r$  c              3  óx   <"  € T F/  pSP                  V4      '       g   K  SP                  V4      x € K1  	  R # 5ir?   )r1   )rC   rD   Úpayloads   & €r#   rF   Ú+RaftAdapter._handle_wake.<locals>.<genexpr>Ê  s'   øé € ÐJ©- Q¸7¿;¹;Àq¿>”.�'—+‘+˜a—.�.«-ùs   ƒ:¡:z
raft-wake-iè  zRaft channelÚdmzraft-bridgezRaft Bridge)r˜  Ú	chat_nameÚ	chat_typeÚuser_idÚ	user_nameT)ra   Úmessage_typeÚsourceÚraw_messageÚ
message_idÚinternalz"[raft] Failed to inject wake event)rÅ  r-   r^   ÚloadsÚJSONDecodeErrorr&  rJ   rK   rB   r?  Ú_message_handlerrü   r‚  r   r%  r    ÚnextÚ_WAKE_ID_KEYSre   ÚtimeÚbuild_sourcer   Ú_WAKE_PROMPTr   ÚTEXTÚhandle_messager.   rˆ  )	r®   r§  Úraw_bodyrx   rÍ  Údelivery_idr×  rˆ   rÏ  s	   &&      @r#   rV  ÚRaftAdapter._handle_wake¸  sî  øé € Ø $× 6Ñ 6°wÀUÐ 6Ó K×K‰ˆØÒØˆLð	8Ø.6¯n©n×.>Ò.>”d—j’j Ô*ÀBˆGô ˜'¤4×(Ò(Ü"Ð#4°cÓ:Ð:ä˜g×&Ò&Ü"Ð#8¸#Ó>Ð>Ø˜5 '¨;Ð8HÈ$×J_ÑJ_Ð`ˆ	Ø×$×$Ð$Ü�N‰NÐ]Ô^Ü×$Ò$ Y°sÔ;Ð;ÜÜÔJ­-ÓJÈDÓQ÷ 6ð 6ØœC¤§	¢	£¨dÕ 2Ó3Ð4Ð5ó7ˆð ×"Ñ"¨4×+@Ñ+@ÈNÐfjØ+8ÀMð #ó Sˆä¤,¼[×=MÑ=MÐV\Ø)0¸[ÐSWôYˆð	<Ø×%Ñ% eÓ,×,Ð,ô × Ò  $¨Ð.>À×@UÑ@UÐ!VÐ_bÔcÐcò9 Løô
 ×#Ñ#ô 	8Ü" >°3Ó7Ò7ð	8úñ& -øÜô 	<Ü×ÑÐAÔBÜ×$Ò$ Y°sÔ;Ò;ð	<üs|   ƒH&šF<›H&¨F? ¾F? ÁA"H&Â9AH&ÄA0H&Å=G( ÆG&ÆG( Æ'H&Æ?!G#Ç H&Ç"G#Ç#H&Ç&G( Ç(8H#È H&È"H#È#H&c               ó    € V ^8„  d   QhRRRR/# r¦  r!   )r"   s   "r#   r$   r+  ×  s   € ÷ 
;ñ 
;¨kð 
;¸lñ 
;r%   c              ƒ  	ó†  "  € V P                  VR R7      G Rj  x€L
 w  r#Ve   V#  V P                  P                  \        P                  ! V4      4       \        P                  ! RR /^ÊR7      #  LV  \        P
                   d    \        RR4      u # \         d    p\        \        T4      R4      u Rp?# Rp?ii ; i5i)TrÉ  NrÊ  r¿  rX   r$  )rÅ  rD  r¸   r^   rÛ  rÜ  r&  r.   r    r   r%  )r®   r§  Úraw_textrx   rÄ  s   &&   r#   rW  ÚRaftAdapter._handle_activity×  s¨   é € Ø $× 6Ñ 6°wÀTÐ 6Ó J×J‰ˆØÒØˆLð	2Ø× Ñ ×%Ñ%¤d§j¢j°Ó&:Ô;ô
 × Ò  $¨ °cÔ:Ð:ñ Køô
 ×#Ñ#ô 	8Ü" >°3Ó7Ò7Üô 	2Ü"¤3 s£8¨SÓ1Õ1ûð	2üsP   ‚C™A0šC§/A2 ÁCÁ2!B>ÂCÂB>ÂB>ÂB9Â3B>Â4CÂ9B>Â>Cc               ó    € V ^8„  d   QhRRRR/# r¦  r!   )r"   s   "r#   r$   r+  ã  s   € ÷ Iñ I°Kð IÀLñ Ir%   c              ƒ  	óú   "  € V P                  V4      '       g   \        R R4      # \        VP                  P	                  RR4      ^È4      p\
        P                  ! V P                  P                  V4      4      # 5i)r»  r¼  r¦   Ú200)	r·  r&  r   Úqueryr1   r   r%  rD  rÃ   )r®   r§  r»   s   && r#   rX  Ú"RaftAdapter._handle_activity_drainã  sb   é € Ø×Ñ ×(Ò(Ü" >°3Ó7Ð7Ü  §¡×!2Ñ!2°5¸%Ó!@À#ÓFˆ
Ü× Ò  ×!5Ñ!5×!;Ñ!;¸JÓ!GÓHÐHùs   ‚A9A;c               ó    € V ^8„  d   QhRRRR/# )r   rˆ   r   r   r³   r!   )r"   s   "r#   r$   r+  é  s   € ÷ ,ñ ,¨,ð ,¸4ñ ,r%   c              ƒ  ób  <"  € VP                   '       d   \        SV `	  V4      G Rj  x€L
  R# V P                  '       g   R# V P	                  V4      pW P
                  9   d/   \        P                  RV4       \        V P                  W!4       R# \        SV `	  V4      G Rj  x€L
  R#  L‚ L5i)zBAccept Raft wake hints without interrupting an active Hermes turn.Nz&[raft] Wake queued for busy session %s)
rÚ  r4  rä  rÝ  Ú_event_session_keyÚ_active_sessionsrü   rý   r   Ú_pending_messages)r®   rˆ   Úsession_keyrE  s   && €r#   rä  ÚRaftAdapter.handle_messageé  s�   øé € à�>�>ˆ>ä‘'Ñ(¨Ó/×/Ð/ÙØ×$×$Ð$ÙØ×-Ñ-¨eÓ4ˆØ×/Ñ/Ô/Ü�L‰LÐAÀ;ÔOÜ'¨×(>Ñ(>ÀÔSÙÜ‰gÑ$ UÓ+×+Ò+ñ 0ñ 	,ùs(   ƒ%B/¨B+©B/ÁA#B/Â$B-Â%B/Â-B/c               ó    € V ^8„  d   QhRRRR/# r²   r!   )r"   s   "r#   r$   r+  ø  s   € ÷ [ñ [ ^ð [¸ñ [r%   c                	ó�   €  V P                   P                  V4       R#   \         d    \        P	                  R RR7        R# i ; i)z/[raft] activity event dropped during validationTrø   N)rD  r¸   r.   rü   rý   )r®   rˆ   s   &&r#   ræ   ÚRaftAdapter.report_activityø  s?   € ð	[Ø× Ñ ×%Ñ% eÖ,øÜô 	[Ü�L‰LÐJÐUYˆL×Zð	[ús   ‚ Ÿ"AÁA)	rD  rC  r=  r7  rA  r<  r9  rB  r?  )NN)rË   rÌ   rÍ   rÎ   rÏ   r¯   r]  ru  rh  rr  r�  r£  rT  r·  rÅ  rV  rW  rX  rä  ræ   rÑ   Ú__classcell__)rE  s   @r#   r(  r(  2  sn   ø† Ù?÷/ð /ð!°E÷ !õF+õ>õ(=÷(õ
;õqõ
wõ
õ&dõ>
;õI÷,ð ,÷[ó [r%   r(  c               ó    € V ^8„  d   QhRRRR/# )r   r*  r   r   r4   r!   )r"   s   "r#   r$   r$   ÿ  s   € ÷ Cñ C˜.ð C¨Tñ Cr%   c                ó”   € V P                   ;'       g    / p\        VP                  R 4      ;'       g    VP                  R4      4      # )Úenabledr1  )r5  r4   r1   )r*  r5  s   & r#   Ú_is_connectedrÿ  ÿ  s8   € Ø�L‰L×Ð˜B€EÜ�—	‘	˜)Ó$×AÐA¨¯	©	°.Ó(AÓBÐBr%   c               ó   € V ^8„  d   QhRR/# )r   r   zOptional[dict]r!   )r"   s   "r#   r$   r$     s   € ÷ Bñ B˜ñ Br%   c                 ó.   € \        4       '       d   RR/# R# )uœ  Auto-enable during gateway config load when the scope-aware RAFT_PROFILE is set.

Auto-enables when RAFT_PROFILE is set (the adapter needs it anyway). Scope-aware: consults the active
profile's own RAFT_PROFILE (env, or a secondary profile's own .env via the secret scope) instead of the
default profile's bridged env value (mirrors the Buzz/SimpleX fix for 98738) â€” see
``_resolve_raft_profile``. See #98738.
rþ  TN)r2   r!   r%   r#   Ú_env_enablementr    s   € ô !6× 7Ò 7ˆI�tÐÐA¸TÐAr%   c               ó   € V ^8„  d   QhRR/# rp  r!   )r"   s   "r#   r$   r$     s   € ÷ Yñ Y˜4ñ Yr%   c                 ó~  € ^ RI Hp HpHpHpHp ^ RIHpHp ^ RI	H
p V ! R4       V! R4      pV! RRR4      '       d   V! RV R24       R	# R F  p	V! V	4       K  	  \        4        T! R
T;'       g    RR7      p
V
'       g   V! R4       R	# V! RV
P                  4       4       \        4        V! R4       V! R4       R	# )z«``hermes gateway setup`` flow: persists ``RAFT_PROFILE`` to the Hermes env file.
CLI helpers are lazy-imported so the plugin stays importable in gateway runtime and tests.)Úprint_headerÚ
print_infoÚprint_successÚprint_warningÚprompt)Úget_env_valueÚsave_env_value)Údeclines_reconfigureÚRaftr)   zReconfigure Raft?zKeeping RAFT_PROFILE=Ú.NzRaft profile slugr*   )r   z2Raft profile slug is required; skipping Raft setupzRaft configuration savedzFRestart the gateway for changes to take effect: hermes gateway restart)z,Connect Hermes to Raft as an external agent.z2Create the External Agent in Raft first, then run:zQ  raft agent login --server <server-url> --agent <agent-id> --profile-slug <slug>)Úhermes_cli.cli_outputr  r  r  r  r	  Úhermes_cli.configr
  r  Úhermes_cli.setup_platformsr  Úprintr-   )r  r  r  r  r	  r
  r  r  Úexisting_profileÚlinerŠ  s              r#   Úinteractive_setupr    s´   € ÷ eÕdß?Ý?Ù�ÔÙ$ ^Ó4ÐÙ˜FÐ$7¸×HÒHÙÐ*Ð+;Ð*<¸AÐ>Ô?Ùófˆá�4Öñfô 
„GÙÐ(Ð2B×2HÐ2HÀbÔI€GßÙÐJÔKÙÙ�> 7§=¡=£?Ô3Ü	„GÙÐ,Ô-ÙÐWÖXr%   c               ó   € V ^8„  d   QhRR/# rp  r!   )r"   s   "r#   r$   r$   (  s   € ÷ /ñ /�Tñ /r%   c                óJ  € T P                  RRRR\        \        \        R.R\        \
        RRP                  \        4       ;'       g    R	R
7      R7       R\        3R\        3R\        3R\        3R\        3R\        3R\        33 F  w  rV P                  W4       K  	  R# )u:   Plugin entry point â€” called by the Hermes plugin system.r6   z+Join a Raft workspace as an external agent.zDhttps://hermes-agent.nousresearch.com/docs/user-guide/messaging/raftr  r)   z,Install the Raft CLI from https://raft.buildu   ðŸ””a&  You are connected to Raft via an external-agent channel. Run `raft --profile {profile} profile show` to confirm which agent profile is active. Run `raft --profile {profile} manual get raft-cli-overview` to learn available Raft commands. Always pass `--profile {profile}` to every raft CLI call.zyour-agent-profile)rŠ  )r¡  Údashboard_descriptionÚdocs_urlÚlabelÚadapter_factoryÚcheck_fnÚis_connectedÚrequired_envÚinstall_hintÚsetup_fnÚenv_enablement_fnÚemojiÚplatform_hintÚon_session_startÚpre_llm_callÚpre_tool_callÚpost_tool_callÚpost_llm_callÚon_session_endÚon_session_finalizeN)Úregister_platformr(  r:   rÿ  r  r  r"   r2   rþ   r  r  r  r  r  r   Úregister_hook)ÚctxÚ	hook_nameÚcallbacks   &  r#   Úregisterr0  (  s¿   € à×ÑØØKØWØÜ#Ü(Ü"Ø$Ð%ØCÜ"Ü)ØðH÷ ‰&Ô.Ó0×HÐHÐ4Hˆ&Ó
Ið) ô Kð* "4Ô5FÐ GÈ.ÔZjÐIkØ!0Ô2CÐ DÐGWÔYkÐFlØ!0Ô2CÐ DÐGWÔYhÐFiØ!6Ô8LÐ Mó OÑˆ	ð 	×Ñ˜)Ö.ó	 Or%   )rt   Ú	attemptIdÚ	messageIdræ  Úwake_idÚid>   rÃ  ra   r�   ÚmessageÚpreviewÚsnippetÚmessagesr?   )r{   r|   )r}   )r�   ÚtoolInputTruncatedÚtoolOutputTruncated)sÚ__conditional_annotations__rÏ   Ú
__future__r   Úcollectionsr   r   r   r   rò   r³  r^   Úloggingr/   ÚrerN  r8   rY  r„  Úsysr«   rà  rƒ   ÚweakrefÚpathlibr   Ú_PathÚtypingr   r	   r
   r   r   Úaiohttpr   r7   ÚImportErrorr/  Úinsertr    Ú__file__ÚresolveÚparentsÚgateway.configr   r   Úgateway.platforms.baser   r   r   Úgateway.platforms.eventr   r   Úgateway.platforms._sharedr   r   r+   Ú	getLoggerrË   rü   r6  r8  r:  r>  r@  r§   r`   r‚   rÀ   r²  rß  râ  rA   ÚcompilerV   rU   r—   Úsplitr˜   ÚWeakSetr   Ú__annotations__r¬   rå   rÖ   r   r   r   r2   r:   rB   rY   rb   rg   r�   rš   r�   rŸ   rÚ   rá   ré   rô   rþ   r  r  r  r  r  r   r&  r(  rÿ  r  r  r0  )r;  s   @r#   Ú<module>rT     s  øðôõ #å ß ,Ñ ,Û Û Û Û Û 	Û 	Û Û Û Û Û 
Û Û Û Û Ý !ß 3Õ 3ðÝØÐð
 ‡�‡��‘3‘u˜X“×.Ñ.Ó0×8Ñ8¸Õ;Ó<Ô =ç 3ß _Ñ _ß =ß Tà	×	Ò	˜8Ó	$€à€Ø€Ø€Ø#Ð ØÐ Ø Ð ØÐ Ø*Ð Ø0Ð Ø+Ð ØU€ðFð ò
 `Ð Ø—*’*Ð5Ó6€ØÐ ÙðMßMRÉUËWóVÐ ð 29·²Ó1BÐ Ð.Ó BØ!ŸšÓ(Ð Ø—^’^Ó%Ð Ù!›eÐ �8Ó #Ù›5€�Ó  Ù"%£%Ð �xÓ 'õ	6õ<õW÷$õ
]õðÐQUð Ðhlð Ø+/ðØDHðØ]aðà,0÷ð*   ¨Ð?ØÑ;Ð=TÐUØ?ÑA^Ð`kÐlðnÐ õ÷:%ñ %ñ<7ÐY^÷ 7ð 7õSõ'òð ô"ó ð"ð ô&ó ð&ð ôbó ðbð ô1ó ð1ð ôó ðð ôJó ðJð ô_ó ð_õ
KôJ[Ð%ô J[õZCõ
BõY÷2/øðO ô ØÐØ
ƒCðús   Á.J  Ê JÊJ