+
    jHàjŒ'  ã                  óV  € R t ^ RIH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 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ]P0                  ! R
4      tRt]! ]	P8                  ! 4       4      t]P<                   ! R R4      4       t] ! 0 Rm4      t!R R lt" ! R R4      t#R# )z0The off-turn, paired-DM-only ``/login`` command.)ÚannotationsN)Úcopy_context)ÚAny)Úuuid4)Út)Ú_first_agent)Úpolicy_for_runner_source)Ú	anon_authzgateway.runÚloginc                  óR   € ] tR t^t$ R]R&   R]R&   R]R&   RtR]R	&   RtR]R
&   RtR# )Ú_SignInAttemptÚstrÚ
attempt_idÚtupleÚkeyr   ÚsourceFÚboolÚ	cancelledÚsaving© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r   Ú__static_attributes__r   ó    ÚA/home/ubuntu/.hermes/hermes-agent/gateway/slash_commands_login.pyr   r      s%   ‡ àƒOØ	ƒJØƒKØ€IˆtÓØ€FˆD×r   r   c               ó    € V ^8„  d   QhRRRR/# )é   Útextr   Úreturnr   r   )Úformats   "r   Ú__annotate__r#   (   s   € ÷ ñ °ð ¸ñ r   c                ól  € ^ RI Hp \        VRR4      VP                  8w  d   R# ^ RIHp V! V 4      pVe&   VP                  P                  VP                  4      MRpVf   R# VP                  P                  VP                  RVRRR	R
RR\        4       P                  R,          ,           /RR7       R# )zðA LOCAL session's adapter ``send`` is a no-op (viewers read the event stream), so the
sign-in link/code/result reach its viewers as a sticky ``notification.show``. False when
*source* is not a live local session (the platform push applies).)ÚPlatformÚplatformNF)Úactive_authorityr    ÚlevelÚinfoÚkindÚstickyr   zlogin:ºNé   Nznotification.show)Ú
event_typeT)Úgateway.configr%   ÚgetattrÚLOCALÚgateway.session_authoritiesr'   ÚsessionsÚgetÚchat_idÚevent_streamÚpublishr   Úhex)Úrunnerr   r    r%   r'   Ú	authorityÚlives   &&&    r   Ú_publish_local_noticer<   (   s¤   € õ (Üˆv�z 4Ó(¨H¯N©NÔ:ÙÝ<Ù  Ó(€IØ5>Ò5Jˆ9×Ñ×!Ñ! &§.¡.Ô1ÐPT€DØ‚|ÙØ×Ñ×Ñ˜fŸn™n¨v°t¸WÀfÈfÐV^Ø/4°hÄÃÇÁÈRÅÕ6Pð/Rà)<ð ô >ñ r   c                  óh   € ] tR t^:t]tR tR tR tR R ltR R lt	R R	 lt
R
 R ltR R ltRtR# )ÚGatewayLoginCommandsMixinc                óÚ   € \        V RR4      p\        V\        4      '       g   \        P                  ! 4       ;qn        \        V RR4      p\        V\        4      '       g	   / ;q n        W3# )zHReturn the lazily created registry used by normal and bare test runners.Ú_login_lockNÚ_login_attempts)r0   Ú
isinstanceÚ
_LOCK_TYPEÚ	threadingÚLockr@   ÚdictrA   )ÚselfÚlockÚattemptss   &  r   Ú_login_registryÚ)GatewayLoginCommandsMixin._login_registry=   s^   € ä�t˜]¨DÓ1ˆÜ˜$¤
×+Ò+Ü&/§n¢nÓ&6Ð6ˆDÔ#Ü˜4Ð!2°DÓ9ˆÜ˜(¤D×)Ò)Ø.0Ð0ˆHÔ+Øˆ~Ðr   c                	óœ   € \        V R R4      pVe   \        VRR4      '       d(   \        P                  P                  ^RR7      ;qn        V# )Ú_login_execNÚ	_shutdownFzhermes-login)Úmax_workersÚthread_name_prefix)r0   Ú
concurrentÚfuturesÚThreadPoolExecutorrM   )rG   Úexecutors   & r   Ú_login_executorÚ)GatewayLoginCommandsMixin._login_executorG   sT   € Ü˜4 °Ó5ˆØÒœw x°¸e×DÒDÜ*4×*<Ñ*<×*OÑ*OØ°.ð +Pó +Bð BˆHÔ'àˆr   c              ƒ  	ó²   "  € \        4       p\        P                  ! 4       pVP                  V P	                  4       VP
                  V4      G R j  x€L
 #  L5i©N)r   ÚasyncioÚget_running_loopÚrun_in_executorrU   Úrun)rG   ÚfuncÚctxÚloops   &&  r   Ú_run_login_blockingÚ-GatewayLoginCommandsMixin._run_login_blockingN   sB   é € Ü‹nˆÜ×'Ò'Ó)ˆØ×)Ñ)¨$×*>Ñ*>Ó*@À#Ç'Á'È4ÓP×PÐPÑPùs   ‚AAÁAÁAc               ó   € V ^8„  d   QhRR/# )r   r!   r   r   )r"   s   "r   r#   Ú&GatewayLoginCommandsMixin.__annotate__S   s   € ÷ +'ñ +'°Cñ +'r   c           	   ƒ  	ó|  "  € VP                   p\        \        VP                  R VP                  4      4      P	                  4       p\        VRR4      R	9   ;'       d(    \        \        VRR4      4      ;'       d
    V\        9  pV'       g   \        P                  # \        W4      pVP                  '       d3   VP                  \        VRR4      4      '       g   \        P                  # \        \        VP                  R VP                  4      4      \        VP                  4      \        \        VRR4      ;'       g    R4      3pV P                  4       w  rxT;_uu_ 4        VP                  \         4      p	V	e>   V	P"                  V8w  g   V	P$                  '       d   \        P&                  uuRRR4       # V	e   RV	n        RRR4       V P+                  \        P,                  4      G Rj  x€L
 p
V
'       d-   \        P.                  ! V
4      '       g   \        P0                  # T;_uu_ 4        VP                  \         4      p	V	e>   V	P"                  V8w  g   V	P$                  '       d   \        P&                  uuRRR4       # V	e   RV	n        \3        \5        4       P6                  R,          WbR7      pW¸\         &   RRR4       V P9                  \:        P<                  ! V P?                  X4      4      4       \        P@                  #   + '       g   i     ELR; i EL3  + '       g   i     Lk; i5i)
ÚvalueÚ	chat_typeNr5   Úuser_idÚ Tr,   )r   r   r   >   ÚdmÚprivate)!r   r   r0   r&   Úlowerr   Ú_LOGIN_BLOCKED_PLATFORMSr	   ÚLOGIN_DM_ONLYr   ÚenabledÚis_adminÚLOGIN_NOT_ALLOWEDr5   rJ   r4   Ú_LOGIN_SINGLEr   r   ÚLOGIN_BUSY_ELSEWHEREr   r`   Úcurrent_nous_stateÚis_guest_stateÚUPGRADE_ALREADY_SIGNED_INr   r   r8   Ú_retain_background_taskrY   Úcreate_taskÚ
_run_loginÚUPGRADE_START)rG   ÚeventÚsrcr&   Ú	paired_dmÚpolicyr   rH   rI   r;   ÚstateÚattempts   &&          r   Ú_handle_login_commandÚ/GatewayLoginCommandsMixin._handle_login_commandS   sU  é € Ø�l‰lˆÜ”w˜sŸ|™|¨W°c·l±lÓCÓD×JÑJÓLˆä�C˜ dÓ+Ð/@Ñ@÷ 9ð 9Ü”W˜S )¨TÓ2Ó3÷9ð 9àÔ 8Ñ8ð 	÷
 Ü×*Ñ*Ð*ä)¨$Ó4ˆØ�>�>ˆ> &§/¡/´'¸#¸yÈ$Ó2O×"PÒ"PÜ×.Ñ.Ð.ä”7˜3Ÿ<™<¨°#·,±,Ó?Ó@Ä#ÀcÇkÁkÓBRÜ”7˜3 	¨2Ó.×4Ð4°"Ó5ð7ˆà×-Ñ-Ó/‰ˆ÷ ŠTØ—<‘<¤Ó.ˆDØÒ T§X¡X°¤_¸¿¿¸Ü ×5Ñ5÷ ŠTð ÒØ!%�”÷ ð ×.Ñ.¬y×/KÑ/KÓL×Lˆßœ×1Ò1°%×8Ò8Ü×6Ñ6Ð6çŠTØ—<‘<¤Ó.ˆDØÒ T§X¡X°¤_¸¿¿¸Ü ×5Ñ5÷ ŠTð ÒØ!%�”Ü$Ü ›7Ÿ;™; r�?°ôAˆGà&-”]Ñ#÷ ð 	×$Ñ$¤W×%8Ò%8¸¿¹ÈÓ9QÓ%RÔSÜ×&Ñ&Ð&÷- �TˆTúò M÷ �Tüs€   ‚A9L<Á<L<ÂCL<Å'<LÆ$LÆ3L<Æ>LÇ	*L<Ç3L&Ç4L<È L<ÈL<È6<L)É3L)ÊL<Ê9L)ËAL<ÌL#	Ì
L<Ì)L9	Ì4L<c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r!   ÚNoner   )r"   s   "r   r#   rc   €   s   € ÷ 0ñ 0¨ð 0¸4ñ 0r   c           	   ƒ  	ó2
  aaa	"  € V P                  4       w  o	pR  VV	3R llp\        P                  VV	3R l4       p\        P                  ! RW4R7      oRp   V P                  V3R l4      G Rj  x€L
 pTf�    S	;_uu_ 4        TP                  \        4      SJ d   TP                  \        R4       RRR4       \        P                  ! \        4      ;_uu_ 4        SP                  4        RRR4       R# T P!                  ST4      G Rj  x€L
  TP"                  '       g   KÑ  Rp S	;_uu_ 4        TP                  \        4      SJ d   TP                  \        R4       RRR4       \        P                  ! \        4      ;_uu_ 4        SP                  4        RRR4       R#  EL9  \         dÒ   p\        P                  R	SP                  T4        Rp?S	;_uu_ 4        TP                  \        4      SJ d   TP                  \        R4       RRR4       M  + '       g   i     M; i\        P                  ! \        4      ;_uu_ 4        SP                  4        RRR4       R#   + '       g   i     R# ; iRp?ii ; i  + '       g   i     ELà; i  + '       g   i     R# ; i EL¥  + '       g   i     EL[; i  + '       g   i     R# ; i  \$        P&                   d0    S	;_uu_ 4        RSn        RRR4       h   + '       g   i     h ; i\         d˜    \        P                  R
SP                  RR7       T'       gk   \        P                  ! \        4      ;_uu_ 4        T P+                  S\        P,                  4      G Rj  x€L 
  RRR4        M  + '       g   i      M	; i Mi ; iS	;_uu_ 4        TP                  \        4      SJ d   TP                  \        R4       RRR4       M  + '       g   i     M; i\        P                  ! \        4      ;_uu_ 4        SP                  4        RRR4       R#   + '       g   i     R# ; i  S	;_uu_ 4        TP                  \        4      SJ d   TP                  \        R4       RRR4       M  + '       g   i     M; i\        P                  ! \        4      ;_uu_ 4        SP                  4        RRR4       i   + '       g   i     i ; i; i5i)c               ó   € V ^8„  d   QhRR/# )r   r!   r   r   )r"   s   "r   r#   Ú:GatewayLoginCommandsMixin._run_login.<locals>.__annotate__ƒ   s   € ÷ 	)ñ 	)˜Dñ 	)r   c                 ón   <€ S;_uu_ 4        S P                   uuR R R 4       #   + '       g   i     R # ; irX   )r   )r   rH   s   €€r   Ú
_cancelledÚ8GatewayLoginCommandsMixin._run_login.<locals>._cancelledƒ   s   ø€ ß’Ø×(Ñ(÷ ——“ús   Œ#£4	c               3  ó®   <"  € S;_uu_ 4        SP                   '       g   R Sn        SP                  p RRR4       X x € R#   + '       g   i     L; i5i)TN)r   r   )Úmay_persistr   rH   s    €€r   Ú_persist_guardÚ<GatewayLoginCommandsMixin._run_login.<locals>._persist_guard‡   s=   øé € ÷
 ’Ø×(×(Ð(Ø%)�G”NØ%Ÿn™n�÷ ð Ô÷	 —üs   ƒAŽ&A´AÁA	ÁAg      .@)Útimeout_secondsr   Úpersist_guardFTc                 ó   <€ \        S R 4      # rX   )Únext)Úgens   €r   Ú<lambda>Ú6GatewayLoginCommandsMixin._run_login.<locals>.<lambda>—   s   ø€ Ä4ÈÈTÄ?r   Nz-/login %s: executor unavailable, stopping: %sz/login attempt %s failed©Úexc_info)rJ   Ú
contextlibÚcontextmanagerr	   Úrun_sign_inr`   ÚRuntimeErrorÚloggerÚwarningr   r4   rq   ÚpopÚsuppressÚ	ExceptionÚcloseÚ_render_login_stateÚterminalrY   ÚCancelledErrorr   Ú_push_loginÚUPGRADE_NOT_COMPLETED)
rG   r   rI   r‰   r�   Úpushed_terminalr~   Úexcr“   rH   s
   &f      @@r   rx   Ú$GatewayLoginCommandsMixin._run_login€   s_  úé € Ø×-Ñ-Ó/‰ˆˆh÷	)ñ 	)ô 
×	"Ñ	"õ	ó 
#ð	ô ×#Ò#°DÀJÔmˆØˆð	ØðØ"&×":Ñ":Ô;RÓ"S×S�Eð
 ’=Ø÷ ’Ø—<‘<¤Ó.°'Ó9Ø—L‘L¤°Ô5÷ ô ×$Ò$¤Y×/Õ/Ø—	‘	”÷ 0Ñ/ð# ×.Ñ.¨w¸Ó>×>Ð>Ø—>—>’>Ø&*�OØ÷ ’Ø—<‘<¤Ó.°'Ó9Ø—L‘L¤°Ô5÷ ô ×$Ò$¤Y×/Õ/Ø—	‘	”÷ 0Ñ/ò1 TøÜ#ô Ü—N‘NØGÈ×I[ÑI[Ð]`ôbã÷" ’Ø—<‘<¤Ó.°'Ó9Ø—L‘L¤°Ô5÷ ——�úô ×$Ò$¤Y×/Õ/Ø—	‘	”÷ 0×/×/Ò/þð/ú÷( —�ú÷ 0×/Ð/úò# ?÷ —�ú÷ 0×/Ð/ûô ×%Ñ%ô 	ß’Ø$(�Ô!÷ à÷ –àúÜô 	UÜ�N‰NÐ5°w×7IÑ7IÐTXˆNÔYß"Ü×(Ò(¬×3Õ3Ø×*Ñ*¨7´I×4SÑ4SÓT×TÑT÷ 4×3×3Ò3úñ #ð	Uú÷ ’Ø—<‘<¤Ó.°'Ó9Ø—L‘L¤°Ô5÷ ——�úô ×$Ò$¤Y×/Õ/Ø—	‘	”÷ 0×/×/Ò/û÷ ’Ø—<‘<¤Ó.°'Ó9Ø—L‘L¤°Ô5÷ ——�úô ×$Ò$¤Y×/Õ/Ø—	‘	”÷ 0×/×/Ð/ÿsì  …ATÁK  ÁF. Á2F+Á3F. Á7K  Á<
TÂ0JÂ6*TÃ J!Ã1
TÃ;K  ÄJ5ÄK  Ä)K  Ä,
TÄ60J8Å&*TÆKÆ!
TÆ+F. Æ.J
Æ9!JÇK  Ç
TÇ(0H!È	TÈ!H1	È,*TÉI1É'
TÉ1J	É<	TÊJ
Ê
K  ÊJ	Ê	TÊ!J2	Ê,	TÊ5K  Ê8K		Ë	TËK	Ë	TË OË?LÌ	OÌL ÌOÌ,*OÍ"OÍ9$N-ÎN 
ÎN-Î#OÎ+Q. Î-N>Î8OÎ<Q. Î>OÏQ. ÏOÏQ. Ï
TÏ0P
Ð	TÐ
P	Ð*TÐ?QÑ
TÑQ+	Ñ%	TÑ.TÑ90R2	Ò)	TÒ2SÒ=*TÓ'T	Ó8	TÔTÔTÔTc               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r    r   r!   r„   r   )r"   s   "r   r#   rc   ²   s&   € ÷ Xñ X¨ð X¸sð XÀtñ Xr   c              ƒ  ó   "  €  \        WP                  V4      '       d   R# V P                  VP                  V4      G Rj  x€L
  R#  L  \         d'    \        P                  RTP                  RR7        R# i ; i5i)zNPush one notice without allowing a transport failure to abort the state drain.Nz/login %s: push failedTr–   )r<   r   Ú_deliver_platform_noticer    rœ   r�   r   )rG   r   r    s   &&&r   r¥   Ú%GatewayLoginCommandsMixin._push_login²   sc   é € ð	XÜ$ T¯>©>¸4×@Ò@ÙØ×/Ñ/°·±ÀÓE×EÔEøÜô 	XÜ�N‰NÐ3°W×5GÑ5GÐRVˆN×Wð	XüsD   ‚A>„A
  A>¢A
 ÁAÁA
 ÁA>ÁA
 Á
-A;Á7A>Á:A;Á;A>c               ó    € V ^8„  d   QhRRRR/# rƒ   r   )r"   s   "r   r#   rc   »   s   € ÷ 4ñ 4°ð 4È4ñ 4r   c              ƒ  	ó  "  € \        V\        P                  4      '       dl   V P                  WP                  4      G R j  x€L
  V P                  WP
                  4      G R j  x€L
  V P                  WP                  4      G R j  x€L
  R # \        V\        P                  4      '       d   R # \        V\        P                  4      '       d~   VP                  pVP                  '       dE   VP                  '       d3   V P                  4       G R j  x€L
 pV'       d   V\        R4      ,          pV P                  W4      G R j  x€L
  R # V P                  WP                  4      G R j  x€L
  R #  EL1 EL Lð Lf L5 L5i)Nz!gateway.login.free_tier_remaining)rB   r	   ÚCoder¥   ÚlinkÚcodeÚcopy_with_waitÚWaitingÚ	CompletedÚcopyÚmodel_changedÚmodelÚ_sweep_sessions_off_welcomer   )rG   r   r~   r¶   Úfaileds   &&&  r   r¢   Ú-GatewayLoginCommandsMixin._render_login_state»   s  é € Ü�eœYŸ^™^×,Ò,Ø×"Ñ" 7¯J©JÓ7×7Ð7Ø×"Ñ" 7¯J©JÓ7×7Ð7Ø×"Ñ" 7×,@Ñ,@ÓA×AÐAÙÜ�eœY×.Ñ.×/Ò/ÙÜ�eœY×0Ñ0×1Ò1Ø—:‘:ˆDØ×"×"Ð" u§{§{ {Ø#×?Ñ?ÓA×A�ßØœAÐAÓBÕB�DØ×"Ñ" 7Ó1×1Ð1ÙØ×Ñ˜w¯
©
Ó3×3Ò3ò 8Ú7ÙAñ Bñ 2á3ùs~   ‚?F ÁE2Á"F Á$E5Á%"F ÂE8ÂA%F Ã.F Ä F ÄE:ÄF Ä &F ÅE<Å$F Å+E>Å,F Å5F Å8F Å:F Å<F Å>F c               ó   € V ^8„  d   QhRR/# )r   r!   Úintr   )r"   s   "r   r#   rc   Í   s   € ÷ "ñ "°3ñ "r   c              ƒ  óX  "  € \        V RR4      p\        V RR4      ;'       g    / pT;'       g    \        P                  ! 4       ;_uu_ 4        \        VP	                  4       4      pRRR4       X UUu. uF`  w  rE\        V4      ;pf   K  \        \        VRR4      4      R8X  g   K3  \        \        VRR4      4      \        P                  8X  g   K^  VNKb  	  ppp^ pV FÇ  pV P                  p	V	P                  V4      ;'       g    / p
\        V
P                  R4      ;'       g    R4      \        P                  8X  dU   \        ^4       F(  p V P                  P                  VR4      G Rj  x€L
   M	  V^,          pK£  V	P#                  VR4        V P%                  V4       KÉ  	  V#   + '       g   i     ELP; iu uppi  LW  \         d'    T^8X  d   \        P!                  RTR	R
7        Kª   K­  i ; i  \         d    \        P!                  RTR	R
7        EKD  i ; i5i)zLClear durable overrides before eviction; return the number of failed clears.Ú_agent_cache_lockNÚ_agent_cacheÚproviderrh   Únousr¸   z1/login: failed to clear free-tier override for %sTr–   z,/login: failed to evict free-tier session %s)r0   r˜   ÚnullcontextÚlistÚitemsr   r   r	   ÚGUEST_MODELÚ_session_model_overridesr4   ÚrangeÚasync_session_storeÚset_model_overrider    rœ   r�   rž   Ú_evict_cached_agent)rG   rH   ÚcacheÚentriesr   ÚentryÚagentÚkeysrº   Ú	overridesÚoverrider   s   &           r   r¹   Ú5GatewayLoginCommandsMixin._sweep_sessions_off_welcomeÍ   sÿ  é € ä�tÐ0°$Ó7ˆÜ˜˜n¨dÓ3×9Ð9°rˆØ×.Ð.”j×,Ò,Ó.×.Ñ.Ü˜5Ÿ;™;›=Ó)ˆG÷ /ñ #*ô
Ù")‘J�CÜ% eÓ,Ð,�ô ä”G˜E :¨rÓ2Ó3°vÑ=ô ô ”G˜E 7¨BÓ/Ó0´I×4IÑ4IÑI÷ ˆC¡'ð 	ñ 
ð ˆÛˆCØ×5Ñ5ˆIØ —}‘} SÓ)×/Ð/¨RˆHÜ�8—<‘< Ó(×.Ð.¨BÓ/´9×3HÑ3HÔHÜ$ Qžx�GðiØ"×6Ñ6×IÑIÈ#ÈtÓT×TÐTÙñ  (ð ˜a•K�FÙØ—‘˜c 4Ô(ðcØ×(Ñ(¨Ö-ñ% ð* ˆ÷= /×.Ð.üó
ñ Uøä$ô iØ" aœ<Ü"ŸN™NØ SÐUXÐcgð +÷ iò (ðiûô ô cÜ—‘ÐMÈsÐ]a�×bÐbðcüs¦   ‚-H*°H*ÁF/Á(H*Á5GÂGÂ*&GÃGÃ-H*Ä	H*Ä)(H*ÅGÅ1G	Å2GÅ6!H*ÆG?Æ)H*Æ/G 	Æ:H*Ç	GÇ*G<Ç5H*Ç;G<Ç<H*Ç?#H'È"H*È&H'È'H*)rA   rM   r@   N)r   r   r   r   rq   rJ   rU   r`   r€   rx   r¥   r¢   r¹   r   r   r   r   r>   r>   :   s8   † Ø!€MòòòQõ
+'õZ0õdXõ4÷$"ñ "r   r>   >   Úa2aÚntfyÚraft)$Ú__doc__Ú
__future__r   rY   Úconcurrent.futuresrQ   r˜   ÚdataclassesÚloggingrD   Úcontextvarsr   Útypingr   Úuuidr   Ú
agent.i18nr   Úgateway.run_agent_cacher   Úgateway.slash_accessr   Ú
hermes_clir	   Ú	getLoggerrœ   rq   ÚtyperE   rC   Ú	dataclassr   Ú	frozensetrl   r<   r>   r   r   r   Ú<module>rç      s–   ðÙ 6å "ã Û Û Û Û Û Ý $Ý Ý å Ý 0Ý 9Ý  à	×	Ò	˜=Ó	)€à€Ù�)—.’.Ó"Ó#€
ð ×Ñ÷ð ó ðñ %Ò%<Ó=Ð õ÷$uó ur   