+
    lHàjN@  ã                  ó’  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^RI	H
t
Ht ]
! 4       t]P                  t]P                  t]P                   ! ]4      tRR<RR=RR>RR?RR@R	RAR
RB/tR]R&   ]! 0 RCm4      t]! ]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 tR tR t R t!R R lt"]! 0 RDm4      t#]PH                  ! 4       t%R R  lt&R!R"R#R"/R$ R% llt']! R&4      ]R' R( l4       4       t(]! R)4      ]R* R+ l4       4       t(R, R- lt)R. R/ lt*R0 R1 lt+R2 R3 lt,R4 R5 lt-R6 R7 lt.R8 R9 lt/R: R; lt0R# )Ea£  Structured Desktop controls for persisted goal, loop, and heartbeat state.

``session.control.read`` is a stable, allowlisted view of one live session.
``session.control`` accepts a closed set of intent-level actions: goal and
loop actions use their existing TUI command handlers, while controls without a
TUI command use the public manager API. A successful action emits one matching
``session.control.update`` event.
)ÚannotationsN)ÚHandlerRegistryÚbind_modulez
goal.pausezgoal.resumez
goal.clearzgoal.unwaitz
loop.pausezloop.resumez	loop.stopzdict[str, tuple[str, str]]Ú_ACTION_COMMAND_MAPc               ó   € V ^8„  d   QhRR/# ©é   Úreturnúdict | None© )Úformats   "ÚH/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_session_control.pyÚ__annotate__r   1   s   € ÷ "ñ " +ñ "ó    c                ó(  € V e   V P                   R8X  d   R# RV P                  RV P                   RV P                  RV P                  RV P                  P                  4       R\        V P                  4      R	V P                   Uu. uFA  pR
VP                  RVP                  RVP                  RVP                  RVP                  /NKC  	  up/pV P                  '       d   V P                  VR&   V P                  '       d   V P                  VR&   V P                   '       d   V P                   VR&   V P"                  '       d   V P"                  VR&   V P$                  '       d   V P$                  VR&   \'        V 4      ;p'       d   W2R&   V# u upi )z3Return only stable, frontend-safe GoalState fields.NÚclearedÚtitleÚstatusÚ
turns_usedÚ	max_turnsÚcontractÚsubgoalsÚgatesÚcommandÚtimeout_secondsÚmax_retriesÚattemptsÚlast_exit_codeÚ
created_atÚ
updated_atÚpaused_reasonÚlast_verdictÚlast_reasonÚwait_barrier)r   Úgoalr   r   r   Úto_dictÚlistr   r   r   r   r   r   r   r   Úlast_turn_atr    r!   r"   Ú_extract_wait_barrier)ÚstateÚgateÚsnapshotÚbarriers   &   r   Ú_safe_goal_snapshotr-   1   so  € à‚}˜Ÿ™¨	Ô1Ùà�—‘Ø�%—,‘,Ø�e×&Ñ&Ø�U—_‘_Ø�E—N‘N×*Ñ*Ó,Ø”D˜Ÿ™Ó(Øð Ÿšó	
ñ $�ð ˜4Ÿ<™<Ø! 4×#7Ñ#7Ø˜t×/Ñ/Ø˜DŸM™MØ  $×"5Ñ"5óñ $ñ	
ð€Hð$ ××ÐØ!&×!1Ñ!1ˆ�ÑØ××ÐØ!&×!3Ñ!3ˆ�ÑØ××ÐØ$)×$7Ñ$7ˆ�Ñ!Ø××ÐØ#(×#5Ñ#5ˆ�Ñ Ø××ÐØ"'×"3Ñ"3ˆ�ÑÜ'¨Ó.Ð.€wÖ.Ø#*�Ñ Ø€Oùò/	
s   ÂAFc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   V   s   € ÷ 	ñ 	 Kñ 	r   c                óB  € V P                   ;'       g    RpV P                  '       d7   \        P                  ! 4       V P                  8  d   RRRV P                  RV/# V P                  e   RRRV P                  RV/# V P                  e   RR	RV P                  RV/# R# )
zGExpose absolute barriers; countdown presentation belongs to the client.Ú ÚtypeÚuntilÚuntil_atÚreasonNÚsessionÚtargetÚpid)Úwaiting_reasonÚwaiting_untilÚtimeÚwaiting_on_sessionÚwaiting_on_pid)r)   r4   s   & r   r(   r(   V   s›   € à×!Ñ!×'Ð' R€FØ××ÐœtŸyšy›{¨U×-@Ñ-@Ô@Ø˜ ¨U×-@Ñ-@À(ÈFÐSÐSØ×ÑÒ+Ø˜	 8¨U×-EÑ-EÀxÐQWÐXÐXØ×ÑÒ'Ø˜˜x¨×)=Ñ)=¸xÈÐPÐPÙr   c               ó    € V ^8„  d   QhRRRR/# )r   Údeferred_by_goalÚboolr	   r
   r   )r   s   "r   r   r   b   s   € ÷ ñ °Dð ¸[ñ r   c               óø  € V e   V P                   R8X  d   R# RV P                  RV P                   RV P                  RV P                  RV P                  RV P
                  R	V P                  R
V P                  RV P                  RV P                  RV P                  RV P                  RV P                  RV/pV P                  '       d   V P                  VR&   V P                  '       d   V P                  VR&   V# )z?Return allowlisted persisted LoopState fields, never its route.Nr   Úpromptr   ÚmodeÚinterval_secondsÚcurrent_delayÚtimesr2   Ú	max_ticksÚticks_firedr   Úlast_fired_atÚnext_due_atÚawaiting_responser>   r    Úlast_stop_reason)r   rA   rB   rC   rD   rE   r2   rF   rG   r   rH   rI   rJ   r    rK   )r)   r>   r+   s   &$ r   Ú_safe_loop_snapshotrL   b   så   € à‚}˜Ÿ™¨	Ô1Ùà�%—,‘,Ø�%—,‘,Ø�—
‘
Ø˜E×2Ñ2Ø˜×,Ñ,Ø�—‘Ø�—‘Ø�U—_‘_Ø�u×(Ñ(Ø�e×&Ñ&Ø˜×,Ñ,Ø�u×(Ñ(Ø˜U×4Ñ4ØÐ,ð€Hð  ××ÐØ$)×$7Ñ$7ˆ�Ñ!Ø××ÐØ',×'=Ñ'=ˆÐ#Ñ$Ø€Or   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   }   s   € ÷ ñ  {ñ r   c                óÄ   € V e   V P                   R8X  d   R# RV P                  RV P                   RV P                  RV P                  RV P                  RV P
                  /# )	zDReturn only the persisted HeartbeatState fields the Desktop renders.Nr   rA   r   rC   r   rH   Ú
fire_count)r   rA   rC   r   rH   rO   )r)   s   &r   Ú_safe_heartbeat_snapshotrP   }   s]   € à‚}˜Ÿ™¨	Ô1Ùà�%—,‘,Ø�%—,‘,Ø˜E×2Ñ2Ø�e×&Ñ&Ø˜×,Ñ,Ø�e×&Ñ&ðð r   c               ó    € V ^8„  d   QhRRRR/# )r   Úsession_keyÚstrr	   Údictr   )r   s   "r   r   r   ‹   s   € ÷ ñ  3ð ¨4ñ r   c                ó|  € \        V 4      p\        V 4      p\        V 4      p\        VRJ;'       dF    VP                  R8H  ;'       d/    VRJ;'       d#    VP                  R8H  ;'       d    \        V 4      4      p\        V4      p\        W$R7      p\        V4      pRVRVRVR\        WVV4      R\        WV4      /# )	zISerialize persisted session-control state once, without wall-clock churn.NÚactive)r>   r$   ÚloopÚ	heartbeatÚrevisionr   )Ú_load_goal_stateÚ_load_loop_stateÚ_load_heartbeat_stater?   r   Ú_goal_blocks_loop_tickr-   rL   rP   Ú_snapshot_revisionÚ_snapshot_updated_at)rR   Ú
goal_stateÚ
loop_stateÚheartbeat_stater>   r$   rW   rX   s   &       r   Ú_snapshot_controlrc   ‹   sÞ   € ä! +Ó.€JÜ! +Ó.€JÜ+¨KÓ8€OÜØ˜$Ð÷ 	0ð 	0Ø×Ñ Ñ)÷	0ð 	0à˜dÐ"÷	0ð 	0ð ×Ñ Ñ)÷	0ð 	0ô # ;Ó/óÐô ˜zÓ*€DÜ˜zÔM€DÜ(¨Ó9€Ià�Ø�Ø�YØÔ& t°9Ó=ØÔ*¨:À?ÓSðð r   c               ó   € V ^8„  d   QhRR/# )r   r	   rS   r   )r   s   "r   r   r   £   s   € ÷ 
Añ 
A°ñ 
Ar   c                óÄ   € V f   Vf   Vf   R# \         P                  ! RV RVRV/RR	RR7      p\        P                  ! VP	                  R4      4      P                  4       # )
zHHash canonical visible state so equal reads always have equal revisions.r0   r$   rW   rX   FT)Úensure_asciiÚ
separatorsÚ	sort_keyszutf-8)Ú,Ú:)ÚjsonÚdumpsÚhashlibÚsha256ÚencodeÚ	hexdigest)r$   rW   rX   Ú	canonicals   &&& r   r^   r^   £   s_   € à‚|˜š¨Ò):ÙÜ—
’
Ø	��v˜t [°)Ð<ØØØô	€Iô �>Š>˜)×*Ñ*¨7Ó3Ó4×>Ñ>Ó@Ð@r   c                ó¢   aa€ . pV R3VR3VR33 F(  w  opSf   K  VP                  VV3R lV 4       4       K*  	  V'       d   \        V4      # ^ # )zGUse only persisted timestamps; reads never manufacture a new timestamp.c              3  óV   <"  € T F  p\        SV^ 4      ;o'       g   K  Sx € K   	  R# 5i)é    N)Úgetattr)Ú.0Úfieldr)   Úvalues   & €€r   Ú	<genexpr>Ú'_snapshot_updated_at.<locals>.<genexpr>¹   s(   øé € Ð_±¨ÄWÈUÐTYÐ[\ÓE]Ð<]¸EÓ<]Ÿeše³ùs   ƒ)Ÿ
))r   r'   )r   rH   )ÚextendÚmax)r`   ra   rb   Ú
candidatesÚfieldsr)   rx   s   &&&  @@r   r_   r_   °   sb   ù€ à€Jà	Ð3Ð4Ø	Ð4Ð5Ø	Ð9Ð:ó‰ˆˆvð
 ÔØ×ÑÕ_±Ó_Ö_ñ÷ )Œ3ˆz‹?Ð/¨aÐ/r   c                ó   € ^ RI Hp V! V 4      # )rt   )Ú	load_goal)Úhermes_cli.goalsr€   )rR   r€   s   & r   rZ   rZ   ½   ó   € Ý*á�[Ó!Ð!r   c                ó   € ^ RI Hp V! V 4      # )rt   )Ú	load_loop)Úhermes_cli.loopsr„   )rR   r„   s   & r   r[   r[   Ã   r‚   r   c                ó   € ^ RI Hp V! V 4      # )rt   )Úload_heartbeat)Úhermes_cli.heartbeatr‡   )rR   r‡   s   & r   r\   r\   É   s   € Ý3á˜+Ó&Ð&r   c               ó    € V ^8„  d   QhRRRR/# )r   rR   rS   r	   r?   r   )r   s   "r   r   r   Ï   s   € ÷ .ñ .¨ð .°ñ .r   c                ó   € ^ RI Hp V! V 4      # )rt   )Úgoal_blocks_loop_tick)r…   r‹   )rR   r‹   s   & r   r]   r]   Ï   s   € Ý6á  Ó-Ð-r   c               ó    € V ^8„  d   QhRRRR/# )r   r5   rT   r	   zthreading.Lockr   )r   s   "r   r   r   á   s   € ÷ ñ  4ð ¨Nñ r   c                óÔ   € V P                  R 4      pVf?   \        ;_uu_ 4        V P                  R \        P                  ! 4       4      pRRR4       V# V#   + '       g   i     T# ; i)Úcontrol_publish_lockN)ÚgetÚ_PUBLISH_LOCK_GUARDÚ
setdefaultÚ	threadingÚLock)r5   Úlocks   & r   Ú_session_publish_lockr•   á   sR   € Ø�;‰;Ð-Ó.€DØ‚|ß Ö Ø×%Ñ%Ð&<¼i¿nºnÓ>NÓOˆD÷ !à€Kˆ4€K÷ !Ö à€Kús   ¤&AÁA'	Úonly_if_presentFÚonly_if_changedc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   ÚsidrS   r5   r
   r–   r?   r—   r	   ÚNoner   )r   s   "r   r   r   é   s9   € ÷ Yñ Y¨3ð Y¸ð YÐZ^ð YØ7;ðYØHLñYr   c          	     ób  € V'       d-   \        VP                  R4      ;'       g    R4      ;p'       g   R#  \        V4      ;_uu_ 4        \        V4      ;_uu_ 4        \	        V4      pRRR4       V'       d   XR,          '       d'   V'       d*   XR,          VP                  RR4      8X  d    RRR4       R# XR,          VR&   \        RV RV/4       RRR4       R#   + '       g   i     L}; i  + '       g   i     R# ; i  \         d    \        P                  RT R	R
7        R# i ; i)uç  Best-effort ``session.control.update`` for one live session. Also called after the post-turn hooks,
because the goal judge and loop tick evaluation mutate persisted state AFTER ``message.complete`` â€” a
client refresh keyed on that event reads the pre-judge turn count. ``only_if_present`` keeps the
post-turn event stream of a session with no automation state byte-identical to today's;
``only_if_changed`` (every tool completion) also skips a snapshot equal to the last one published.rR   r0   NrY   Úcontrol_revisionzsession.control.updateÚcontrolz,session.control.update publish failed for %sT©Úexc_info)	rS   r�   r•   Ú_session_profile_runtime_scoperc   Ú_emitÚ	ExceptionÚloggerÚdebug)r™   r5   r–   r—   rR   r�   s   &&$$  r   Ú!_publish_session_control_snapshotr¥   é   sî   € ÷ ¬#¨g¯k©k¸-Ó.H×.NÐ.NÈBÓ*OÐO˜;ÖOÙð
YÜ" 7×+Õ+Ü/°×8Õ8Ü+¨KÓ8�÷ 9ç¨°
×(;Ô(;ß#¨°
Õ(;¸w¿{¹{ÐK]Ð_aÓ?bÔ(bØ÷ ,Ñ+ð +2°*Õ*=ˆGÐ&Ñ'ÜÐ*¨C°)¸WÐ1EÔF÷ ,Ñ+ß8×8ú÷ ,×+Ð+ûô ô YÜ�‰ÐCÀSÐSWˆ×XðYúse   ¸D ÁC3ÁC 	Á+C3Á;C3Â
C3ÂC3Â1D Â;C3ÃD Ã C0Ã+C3Ã3D	Ã>D ÄD Ä#D.Ä-D.zsession.control.readc               ó    € V ^8„  d   QhRRRR/# ©r   ÚparamsrT   r	   r   )r   s   "r   r   r     s   € ÷ Fñ F�4ð F˜Dñ Fr   c                óR  € \        W4      w  r#V'       d   V# \        VP                  R4      ;'       g    R4      pV'       g   \        V RR4      #  \	        V R\        V4      /4      #   \         d3   p\        P                  RTRR7       \        T R	R
T 24      u Rp?# Rp?ii ; i)z>Return the current stable control snapshot for a live session.rR   r0   é¡  úsession has no stored keyr�   zsession.control.read failed: %sTrž   é§  zsession.control.read failed: N)	Ú_sess_nowaitrS   r�   Ú_errÚ_okrc   r¢   r£   r¤   )Úridr¨   r5   ÚerrrR   Úexcs   &&    r   Ú_r³   ÿ   s    € ô   Ó,�L€Gß
Øˆ
Ü�g—k‘k -Ó0×6Ð6°BÓ7€KßÜ�C˜Ð:Ó;Ð;ðFÜ�3˜Ô$5°kÓ$BÐCÓDÐDøÜô FÜ�‰Ð6¸ÀdˆÔKÜ�C˜Ð!>¸s¸eÐDÓEÕEûðFús   ÁA) Á)B&Á4'B!ÂB&Â!B&zsession.controlc               ó    € V ^8„  d   QhRRRR/# r§   r   )r   s   "r   r   r     s   € ÷ 1Yñ 1Y�4ð 1Y˜Dñ 1Yr   c           	     ó   € VP                  R4      p\        V\        4      '       d   VP                  4       ;p'       g   \	        V RR4      # VP                  R4      '       d   \	        V RR4      # V\        9  d   \	        V RRV 24      # RV9   d.   VR,          p\        V\        4      '       g   \	        V RR4      # M/ p\        WV4      w  rVV'       d   V# \        W4      w  rxV'       d   V# \        VP                  R	4      ;'       g    R
4      p	V	'       g   \	        V RR4      #  V\        9   d7   \        V,          w  r«\        YP                  R4      ;'       g    R
W«R7      pM\        W“V4      p RV9   d   V#  \#        V	4      pT\        9  d&   \+        TP                  R4      ;'       g    R
T4       \-        T RTR\/        T4      /4      #   \        \        \        3 d!   p\	        T R\!        Y=4      4      u Rp?# Rp?ii ; i  \$         d3   p\&        P)                  RY=RR7       \	        T RRT 24      u Rp?# Rp?ii ; i)zIRun one allowlisted control action and emit its exact resulting snapshot.Úactioné¤  zaction is requiredz	goal.gatez4gate actions are not allowed through session.controlzunknown action: Úargszargs must be an objectrR   r0   rª   r«   Ú
session_id)r¹   ÚnameÚargNÚerrorz,session.control snapshot after %s failed: %sTrž   r¬   z!session.control snapshot failed: r�   Údispatch)r�   Ú
isinstancerS   Ústripr®   Ú
startswithÚ_VALID_ACTIONSrT   Ú_validate_action_argsr­   r   Ú_dispatch_commandÚ_execute_manager_actionÚRuntimeErrorÚ
ValueErrorÚ
IndexErrorÚ_manager_error_messagerc   r¢   r£   r¤   r¥   r¯   Ú_dispatch_envelope)r°   r¨   Ú
raw_actionr¶   r¸   Ú	validatedÚvalidation_errorr5   r±   rR   rº   r»   Úaction_resultr²   r�   s   &&             r   r³   r³     s,  € ð —‘˜HÓ%€JÜ�j¤#×&Ò&¸×9IÑ9IÓ9KÐ/K¨vÖ/KÜ�C˜Ð3Ó4Ð4Ø×Ñ˜×%Ò%Ü�C˜ÐUÓVÐVØ”^Ô#Ü�C˜Ð!1°&°Ð:Ó;Ð;à�ÔØ�f�~ˆÜ˜$¤×%Ò%Ü˜˜TÐ#;Ó<Ð<ð &ð ˆÜ"7¸ÀTÓ"JÑ€IßØÐä Ó,�L€Gß
Øˆ
Ü�g—k‘k -Ó0×6Ð6°BÓ7€KßÜ�C˜Ð:Ó;Ð;ðDØÔ(Ô(Ü+¨FÕ3‰IˆDÜ-¨c¿j¹jÈÓ>V×>\Ð>\ÐZ\ÐcgÔq‰Mä3°KÈÓS‰Mð �-ÔØÐðJÜ# KÓ0ˆð Ô(Ô(Ü)¨&¯*©*°\Ó*B×*HÐ*HÀbÈ'ÔRÜˆs�Y ¨Ô5GÈÓ5VÐWÓXÐXøô! œ*¤jÐ1ô DÜ�C˜Ô5°fÓBÓCÕCûðDûô ô JÜ�‰ÐCÀVÐ[_ˆÔ`Ü�C˜Ð!BÀ3À%ÐHÓIÕIûðJúsC   Ä+A G Å,G ÆH ÇHÇ-HÈHÈHÈIÈ'IÉIÉIc               ó    € V ^8„  d   QhRRRR/# )r   r¶   rS   r¸   rT   r   )r   s   "r   r   r   F  s   € ÷ ñ  sð °$ñ r   c                ól  € VR8X  dU   VP                  R4      p\        V\        4      '       d   VP                  4       ;p'       g   R\	        V RR4      3# RV/R3# VR8X  dP   VP                  R4      p\        V4      \        Jd   R\	        V RR4      3# V^8  d   R\	        V RR	4      3# RV/R3# / R3# )
zGValidate the only actions with input before any manager is constructed.úsubgoal.addÚtextNr·   zsubgoal text is requiredúsubgoal.removeÚindexz subgoal index must be an integerzsubgoal index must be >= 1)r�   r¾   rS   r¿   r®   r1   Úint)r°   r¶   r¸   rÑ   rÓ   s   &&&  r   rÂ   rÂ   F  sÆ   € à�ÔØ�x‰x˜ÓˆÜ˜$¤×$Ò$°T·Z±Z³\Ð-A¨TÖ-AØœ˜c 4Ð)CÓDÐDÐDØ˜ˆ~˜tÐ#Ð#ØÐ!Ô!Ø—‘˜Ó!ˆÜ�‹;œcÓ!Øœ˜c 4Ð)KÓLÐLÐLØ�1Œ9Øœ˜c 4Ð)EÓFÐFÐFØ˜Ð Ð%Ð%Øˆtˆ8€Or   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¹   rS   rº   r»   r	   rT   r   )r   s   "r   r   r   W  s(   € ÷ 	:ñ 	:¨#ð 	:°Sð 	:¸sð 	:Àtñ 	:r   c          	     óð   € \         P                  R4      pVf   \        V RR4      #  V! V RVRVRV/4      #   \         d4   p\        P                  RY#TR	R
7       \        T RRT 24      u Rp?# Rp?ii ; i)z?Delegate a fixed intent to the existing TUI command dispatcher.zcommand.dispatchNr¬   zcommand.dispatch unavailabler¹   rº   r»   z!command.dispatch %s %s failed: %sTrž   zdispatch failed: )Ú_methodsr�   r®   r¢   r£   r¤   )r°   r¹   rº   r»   Úhandlerr²   s   &$$$  r   rÃ   rÃ   W  s‚   € ä�l‰lÐ-Ó.€GØ‚Ü�C˜Ð=Ó>Ð>ð:Ù�s˜\¨:°v¸tÀUÈCÐPÓQÐQøÜô :Ü�‰Ð8¸$ÀSÐSWˆÔXÜ�C˜Ð!2°3°%Ð8Ó9Õ9ûð:ús   ¨7 ·A5Á(A0Á*A5Á0A5c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   rR   rS   r¶   r¸   rT   r	   r   )r   s   "r   r   r   c  s(   € ÷ :ñ :¨ð :°cð :Àð :È$ñ :r   c                ó^   € VP                  R4      '       d   \        WV4      # \        W4      # )z?Use manager APIs for controls that have no TUI command handler.zsubgoal.)rÀ   Ú_execute_subgoal_actionÚ_execute_heartbeat_action)rR   r¶   r¸   s   &&&r   rÄ   rÄ   c  s+   € à×Ñ˜×$Ò$Ü& {¸DÓAÐAÜ$ [Ó9Ð9r   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÚ   r   )r   s   "r   r   r   j  s(   € ÷ :ñ :¨ð :°cð :Àð :È$ñ :r   c                óz  € ^ RI Hp V! V R7      pVR8X  dD   VP                  VR,          4      pRRRRR	\        VP                  P
                  4       R
V 2//# VR8X  d)   VR,          pVP                  V4      pRRRRRV R
V 2//# VP                  4       pV'       d   RT RV^8w  d   RMR R2MRpRRRRV//# )rt   )ÚGoalManager©r¹   rÐ   rÑ   Úresultr1   ÚexecÚoutputu   âœ“ Added subgoal ú: rÒ   rÓ   u   âœ“ Removed subgoal u   âœ“ Cleared z subgoalÚsr0   Ú.zNo subgoals to clear.)r�   rà   Úadd_subgoalÚlenr)   r   Úremove_subgoalÚclear_subgoals)	rR   r¶   r¸   rà   ÚmanagerrÑ   rÓ   Úcounträ   s	   &&&      r   rÜ   rÜ   j  së   € Ý,á [Ô1€GØ�ÔØ×"Ñ" 4¨¥<Ó0ˆØ˜6 6¨8Ð7IÌ#ÈgÏmÉm×NdÑNdÓJeÐIfÐfhÐimÐhnÐ5oÐpÐqÐqØÐ!Ô!Ø�W•ˆØ×%Ñ% eÓ,ˆØ˜6 6¨8Ð7KÈEÈ7ÐRTÐUYÐTZÐ5[Ð\Ð]Ð]Ø×"Ñ"Ó$€EßKPˆ|˜E˜7 (°%¸1´*©3À"Ð*EÀQÑGÐVm€FØ�v˜v x°Ð8Ð9Ð9r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rR   rS   r¶   r	   rT   r   )r   s   "r   r   r   z  s!   € ÷ :ñ :¨3ð :¸ð :Àñ :r   c                ó‚  € ^ RI HpHp V! V R7      pVR8X  d+   VP                  4       pV'       d   RVP                   2MRpMvVR8X  d>   VP                  4       pV'       d#   RV! VP                  4       RVP                   2MR	pM2VR
8X  d   VP                  4       '       d   RMRpM\        RRRV 24      # RRRRV//# )rt   )ÚHeartbeatManagerÚformat_intervalrá   úheartbeat.pauseu   â�¸ Heartbeat paused: zNo heartbeat set.úheartbeat.resumeu   â–¶ Heartbeat resumed (every z): zNo heartbeat to resume.úheartbeat.clearu   âœ“ Heartbeat cleared.Nr·   zunknown heartbeat action: râ   r1   rã   rä   )	rˆ   rð   rñ   ÚpauserA   ÚresumerC   Úclearr®   )rR   r¶   rð   rñ   rì   r)   rä   s   &&     r   rÝ   rÝ   z  sË   € ßFá¨+Ô6€GØÐ"Ô"Ø—‘“ˆß<AÐ)¨%¯,©,¨Ñ8ÐGZ‰Ø	Ð%Ô	%Ø—‘Ó ˆ÷ ð ,©O¸E×<RÑ<RÓ,SÐ+TÐTWÐX]×XdÑXdÐWeÑfØ3ñ 	ð 
Ð$Ô	$Ø-4¯]©]¯_ª_Ñ)ÐBU‰ä�D˜$Ð"<¸V¸HÐ EÓFÐFØ�v˜v x°Ð8Ð9Ð9r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¶   rS   r²   r¢   r	   r   )r   s   "r   r   r   Ž  s!   € ÷ 4ñ 4 3ð 4¨Yð 4¸3ñ 4r   c                ó>   € R RRRRR/pVP                  W 4       RV 2# )rÐ   z/subgoalrÒ   z/subgoal removeúsubgoal.clearz/subgoal clearrå   ©r�   )r¶   r²   Úprefixess   && r   rÈ   rÈ   Ž  s7   € à�zØÐ+ØÐ)ð€Hð
 �l‰l˜6Ó*Ð+¨2¨c¨UÐ3Ð3r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚresponserT   r	   r   )r   s   "r   r   r   —  s   € ÷ 	ñ 	 ð 	¨$ñ 	r   c                óæ   € V P                  R4      ;'       g    / pRVP                  R4      RVP                  R4      RVP                  R4      RVP                  R4      RVP                  R4      /# )zQKeep the command result's user-visible envelope without adding model-facing data.râ   r1   rä   ÚnoticeÚmessageÚdisplayrû   )rþ   râ   s   & r   rÉ   rÉ   —  sh   € à�\‰\˜(Ó#×)Ð) r€Fà�—
‘
˜6Ó"Ø�&—*‘*˜XÓ&Ø�&—*‘*˜XÓ&Ø�6—:‘:˜iÓ(Ø�6—:‘:˜iÓ(ðð r   c               ó   € V ^8„  d   QhRR/# )r   r	   rš   r   )r   s   "r   r   r   £  s   € ÷ 0ñ 0˜ñ 0r   c                ó2   € \        \        4       V RR7       R# )z8Rebind this module's handlers onto the server namespace.)ÚskipN)r³   )r   Úglobals)Úservers   &r   Úregisterr  £  s   € ä”“	˜6¨×/r   )r$   rõ   )r$   rö   )r$   r÷   )r$   Úunwait)rW   rõ   )rW   rö   )rW   Ústop>   rÐ   rú   rÒ   rô   rò   ró   >   r$   rW   ÚsubgoalrX   )1Ú__conditional_annotations__Ú__doc__Ú
__future__r   rm   rk   Úloggingr’   r:   Ú
method_ctxr   r   Ú	_registryÚmethodÚprofile_scopedÚ_profile_scopedÚ	getLoggerÚ__name__r£   r   Ú__annotations__Ú	frozensetÚ_MANAGER_ACTIONSrÁ   r-   r(   rL   rP   rc   r^   r_   rZ   r[   r\   r]   Ú_SESSION_CONTROL_SLASHESr“   r�   r•   r¥   r³   rÂ   rÃ   rÄ   rÜ   rÝ   rÈ   rÉ   r  )r  s   @r   Ú<module>r     s•  øðôõ #ã Û Û Û Û ç 4áÓ€	Ø	×	Ñ	€Ø×*Ñ*€à	×	Ò	˜8Ó	$€ð Ð#ØÐ%ØÐ#ØÐ%ØÐ#ØÐ%ØÐ!ð3Ð Ð/ó ñ ò ó Ð ñ Ð.Ó/Ð2BÕB€õ"õJ	õõ6õõ0
Aò
0ò"ò"ò'õ.ñ %Ò%MÓNÐ ð  —n’nÓ&Ð õðYÐafð YØ>C÷Yñ, ÐÓØôFó ó  ðFñ ÐÓØô1Yó ó ð1Yõhõ"	:õ:õ:õ :õ(4õ	÷0r   