+
    jHàj�  ã                   ó"  € R t ^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt ^ RI	H
t
 R*tRtRtR tR	 tR
 tR tR tRR/R ltR tR tR tR tR tR tR tR tR tR tR tRR/R ltR t R t!R t"R+R RR!RRR"/R# llt#R$ t$R% t%R& t&R' t'R( t(R) t)R# ),a‚  Desktop/Ink projections of existing owner state, plus the session-scoped process verbs.

No legacy server, manager construction, process recovery, or execution on reads. ``process.stop``
and ``process.kill`` stop only processes ``process.list`` projects for the session; ``reload.mcp``
reconciles only the requesting profile's MCP servers; ``file.attach`` stages for one owned session.
N)Úpartial)ÚPath)Ú	authorize)ÚRuntimeStoreErrori @  i €  c                 óæ  € / R RRRRRRR/P                  4        UUu/ uF  w  rV\        \        WR7      bK  	  uppCR	\        \        V 4      R
\        \        V RR7      R\        \        V 4      R\        \
        V 4      R\        \        V 4      R\        \        V 4      R\        \        V 4      R\        \        V 4      /CR Uu/ uF  pV\        \        WR8H  R7      bK  	  upC# u uppi u upi )zsession.control.readÚcontrolzprocess.listÚ	processeszsubagent.listÚ	subagentszsubagent.tailÚtail)Úkindzapproval.pendingzapproval.receivedT)Úackúprocess.stopzprocess.killz
reload.mcpzfile.attachz
tools.showzskills.reloadúsubagent.steer)Ústeer)r   zsubagent.interrupt)Úitemsr   ÚreadÚ	approvalsÚstop_processesÚkill_processÚ
reload_mcpÚattach_fileÚ
show_toolsÚreload_skillsÚsubagent_control)Ú
connectionÚnamer   s   &  Ú>/home/ubuntu/.hermes/hermes-agent/gateway/session_ancillary.pyÚhandlersr      s  € ð
BØ 	¨>¸;Ø˜ o°vðM÷ �eƒgðMô ñ M¹j¸dˆt”WœT :Ô9Ò9ñ Mò ð 
Bð #¤G¬I°zÓ$BØœW¤Y°
ÀÔEØœ¤°
Ó;Øœ¤¨jÓ9¸<ÌÔQ[Ð]gÓIhØ”wœ{¨JÓ7¸ÄwÌzÐ[eÓGfØœ¤°
Ó;ñ
Bñ @óAÙ?ˆtð ”Ô)¨:ÐEUÑ=UÔVÒVÙ?ñAð
Bð 
Bùó ùòAs   �C(ÃC.c          	   ƒ  óF  aa"  € 0 RmV'       d   R0M	\        4       ,          p\        S4      V,
          '       gc   VP                  '       dQ   \        ;QJ d'    V3R lVR0,
           4       F  '       g   K   RM	  RM! V3R lVR0,
           4       4      '       d   \        R4      hVP                  V P                  P
                  9  d   \        R4      h\        WSR	4       V P                  P
                  VP                  ,          SR,          upoVP                  P                  ;_uu_ 4        \        V P                  V4       \        V3R
 l\        V P                  V4      ^,           4       R4      pRRR4       V'       g-   ^ RIHp RXRJ;'       d    \        V! VRS R24      4      RS/# ^ RIHp VP"                  ;_uu_ 4        VP$                  P'                  S4      p	\        XRJ;'       dW    T	;'       dM    V	P'                  R4      VJ ;'       d2    V	P'                  R4      ;'       d    VP)                  SR,          4      4      p
RRR4       RX
'       d   RMRRSRSR,          /#   + '       g   i     EL; i  + '       g   i     L=; i5i)zžDesktop's per-child Steer / Stop: only a child of THIS session's live agent (the
``subagent.list`` rule). The sidecar handler never held an authority session.ÚprofileÚsubagent_idÚtextc              3   ó˜   <"  € T F?  p\        SP                  V4      \        4      '       * ;'       g    SV,          '       * x € KA  	  R # 5i©N)Ú
isinstanceÚgetÚstr)Ú.0ÚkÚparamss   & €r   Ú	<genexpr>Ú#subagent_control.<locals>.<genexpr>*   sC   øé € ð :ZÙDX¸qô ?IÈÏÉÐTUËÔX[Ó>\Ô:\×:mÐ:mÐdjÐklÕdmÔ`mÔ:mÛDXùs
   ƒ/A
³A
TFÚinvalid_paramsÚ	not_foundúsession:controlc              3   ód   <"  € T F%  qP                  R 4      S8X  g   K  VR,          x € K'  	  R# 5i)r    ÚagentN©r%   )r'   ÚrÚsubs   & €r   r*   r+   3   s-   øé € ÐvÑ*V Q×Z_ÑZ_Ð`mÓZnÐruÑZu”j�a˜—j’jÓ*Vùs   ƒ0Ÿ0N)Úrequest_hard_interruptÚfoundzInterrupted via Desktop (Ú))Údelegate_tool_registryr0   Úaccepting_steerÚstatusÚqueuedÚrejected>   r   Ú
session_idr    )Úsetr<   Úanyr   Ú	authorityÚsessionsr   Úevent_streamÚlockÚ_require_current_routeÚnextÚ_owner_objectsÚagent.interrupt_compatr4   ÚboolÚtoolsr7   Ú_active_subagents_lockÚ_active_subagentsr%   r   )r   Úrefr)   r   ÚfieldsÚliveÚchildr4   ÚregistryÚrecordr:   r3   s   &&f$       @r   r   r   &   s.  ùé € ò 6ÇU¸&¹ÔPSÓPUÕV€FÜˆF‹�f×Ô C§N§N N·c³cô :ZØDJÈiÈ[ÖDXó:Z·c·c²cô :ZØDJÈiÈ[ÖDXó:Z÷ 7Zò 7ZäÐ 0Ó1Ð1Ø
‡~�~˜Z×1Ñ1×:Ñ:Ô:Ü Ó,Ð,Üˆj˜vÐ'8Ô9Ø×$Ñ$×-Ñ-¨c¯n©nÕ=¸vÀmÕ?T€I€Dˆ#Ø	×	Ñ	×	×	Ó	Ü˜z×3Ñ3°SÔ9ÜÔv¬.¸×9MÑ9MÈsÓ*SÐTUÖ*VÓvÐx|Ó}ˆ÷ 
 ÷ ÝAØ˜ dÐ*×vÐv¬tÑ4JÈ5ÐTmÐnqÐmrÐrsÐRtÓ4uÓ/vØ˜sð$ð 	$å8Ø	×	(×	(Ó	(Ø×+Ñ+×/Ñ/°Ó4ˆÜ�e 4Ð'÷ 6ð 6¨F÷ 6ð 6°v·z±zÀ'Ó7JÈeÐ7S÷ 6ð 6ÐX^×XbÑXbÐctÓXu÷ 6ð 6ØŸ+™+ f¨V¥nÓ5ó7ˆ÷ 
)ð §&‘h¨j¸-ÈÈfÐV\Ð]cÕVdÐeÐe÷ 
 ×	Ð	ú÷ 
)×	(üst   „AJ!Á
J!ÁJ!Á7%J!ÂBJ!Ä4AI:Å<J!ÆJ!Æ4J!Ç5JÈJÈ#JÈ<JÉJ!É*J!É:J	Ê	J!ÊJ	ÊJ!c              ƒ  ó:  aaaa"  € \        V4      RR0,
          '       g3   \        VP                  \        4      '       d   VP                  '       g   \	        R4      hV P
                  oVP                  SP                  9  d   \	        R4      h\        WVR4       ^ RIH	o ^ RI
Hp V! SP                  SP                  VP                  ,          P                  4      oSP                  V4      oVVVV3R lp\        P                   ! V4      G R	j  x€L
 #  L5i)
a  ``/tools``: the session's catalog as main's CLI listed it (``get_tool_definitions`` with the
session's toolsets, pre tool_search assembly), resolved in the owner, where the MCP and plugin
tools live. Rows carry the first description sentence, grouped by toolset.r<   r   r,   r-   úsession:read©Úowner_scope©Úpolicy_for_sourcec            	      ó6  <€ ^ RI p ^ RIHp ^ RIHp S! S4      ;_uu_ 4        Se   \        SRR4      \        SRR4      rCMŠSe   SP                  SRR7      M/ pSe   \        SP                  V4      4      MRpT! T! VP                  R4      ;'       g    / P                  R4      4      ;'       g    RSe   SP                  MR	4      pV P                  W4R
R
R7      p/ p\        T;'       g    . R R7       Fµ  pVR,          R,          p	\        VR,          P                  RR4      ;'       g    R4      P                  R4      ^ ,          p
RV
9   d   V
RV
P                  R4      ^,            p
TP!                  V P#                  V	4      ;'       g    R. 4      P%                  RV	RV
/4       K·  	  RRR4       R\        XP'                  4       4       UUu. uF  w  r¼RVRV/NK  	  uppR\)        X;'       g    . 4      /#   + '       g   i     LX; iu uppi )é    N)Úparse_config_string_list)Úsession_disabled_toolsetsÚenabled_toolsetsÚdisabled_toolsetsF)Úsecretsr0   ÚcliT)r[   r\   Ú
quiet_modeÚskip_tool_search_assemblyc                 ó"   € V R ,          R,          # )Úfunctionr   © )Úitems   &r   Ú<lambda>Ú+show_tools.<locals>.build.<locals>.<lambda>_   s   € ¸TÀ*Õ=MÈfÖ=Uó    )Úkeyrb   r   ÚdescriptionÚ Ú
z. ÚunknownÚsectionsrH   Útotal)Úmodel_toolsÚagent.skill_utilsrY   ÚtoolsetsrZ   ÚgetattrÚconfigÚlistÚcurrent_toolsetsr%   ÚplatformÚget_tool_definitionsÚsortedr&   ÚsplitÚindexÚ
setdefaultÚget_toolset_for_toolÚappendr   Úlen)ro   rY   rZ   ÚenabledÚdisabledrs   rH   rm   Útoolr   ÚdescÚnÚrowsr0   r?   rT   Úpolicys                €€€€r   ÚbuildÚshow_tools.<locals>.buildO   sþ  ø€ ÛÝ>Ý6Ù˜×#Õ#ØÒ Ü$+¨EÐ3EÀtÓ$LÌgÐV[Ð]pÐrvÓNw™àDJÒDV˜Ÿ™ y¸%˜Ô@Ð\^�ØCIÒCUœ$˜v×6Ñ6°vÓ>Ô?Ð[_�Ù4Ñ5MØ—Z‘Z Ó(×.Ð.¨B×3Ñ3Ð4GÓHó6J÷ 6Rð 6RØMQØ'-Ò'9�F—O’O¸uóF�ð  ×4Ñ4ÀgØ@DÐ`dð 5ó fˆEàˆHÜ˜uŸ{˜{¨Ñ0U×V�Ø˜JÕ'¨Õ/�Ü˜4 
Õ+×/Ñ/°¸rÓB×HÐHÀbÓI×OÑOÐPTÓUÐVWÕX�Ø˜4”<ØÐ 5 §¡¨DÓ!1°AÕ!5Ð6�DØ×#Ñ# K×$DÑ$DÀTÓ$J×$WÐ$WÈiÐY[Ó\×cÑcØ˜T =°$Ð7ö9ñ W÷ $ð& ÄvÈhÏnÉnÓN^ÔG_Ô`ÑG_¹G¸A˜f a¨°$Ó7ÑG_Ò`Øœ˜UŸ[˜[ bÓ)ð+ð 	+÷' $×#üó& as2   ¢A3HÂHÂ3;HÃ/AHÄ1A!HÆHÇHÈH	N)r=   r$   r<   r&   r   r?   r@   r   Úgateway.session_authoritiesrT   Úgateway.session_policyrV   ÚrunnerÚsourcer0   ÚasyncioÚ	to_thread)	r   rK   r)   rV   r†   r0   r?   rT   r…   s	   &&&  @@@@r   r   r   @   s×   ûé € ô ˆ6ƒ{�l IÐ.×.Ô.´jÀÇÁÔQT×6UÒ6UÐ]`×]k×]kÐ]kÜÐ 0Ó1Ð1Ø×$Ñ$€IØ
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Üˆj˜v ~Ô6Ý7Ý8Ù˜y×/Ñ/°×1CÑ1CÀCÇNÁNÕ1S×1ZÑ1ZÓ[€FØ�O‰O˜CÓ €E÷+ð +ô2 ×"Ò" 5Ó)×)Ð)Ñ)ùs   †ADÁCDÄDÄDc              ƒ  óÞ  aaaa"  € \        V4      RR0,
          '       g3   \        VP                  \        4      '       d   VP                  '       g   \	        R4      hV P
                  oVP                  SP                  9  d   \	        R4      h\        WVR4       ^ RIH	o ^ RI
HpHo V! SP                  SP                  VP                  ,          P                  4      oVVVV3R lp\        P                   ! V4      G R	j  x€L
 pVP#                  R
4      ;'       g    . VP#                  R4      ;'       g    . rvR.V'       g	   V'       d   . MR.,           pRV3RV33 F8  w  ršV
'       g   K  VP%                  V	4       VP'                  R V
 4       4       K:  	  TP%                  \)        VP#                  R4      ;'       g    ^ 4       R24       RRP+                  V4      RV/#  Lå5i)zý``/reload-skills`` (and the CLI's ``/skills install``): rescan the skill dirs in the owner,
whose skill-command map serves this session's skill and bundle invocations. The CLI renders
main's lines from ``result`` and queues main's next-turn note itself.r<   r   r,   r-   r.   rS   )rV   Úpolicy_scopec            	      óð   <€ ^ RI Hp  S! S4      ;_uu_ 4        S! SSR7      ;_uu_ 4        V ! 4       uuRRR4       uuRRR4       #   + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)rX   )r   )r?   N)Úagent.skill_commandsr   )Úrescan_skillsr?   rT   r…   r�   s    €€€€r   ÚrescanÚreload_skills.<locals>.rescany   sE   ø€ ÝGÙ˜×#Õ#¡\°&ÀI×%NÖ%NÙ “?÷ &OÑ%N×#Ò#×%N×%Nú×#×#×#Ò#ús!   ˜A$«A	²
A$ÁAÁA$Á$A5	NÚaddedÚremovedzReloading skills...zNo new skills detected.zAdded skills:zRemoved skills:c              3   óL   "  € T F  pR VP                  RR4       2x € K  	  R# 5i)z  - r   rj   Nr1   )r'   rd   s   & r   r*   Ú reload_skills.<locals>.<genexpr>ƒ   s#   é € ÐIÁ5¸4˜4 §¡¨°Ó 4Ð5Õ6Ã5ùó   ‚"$rn   z skill(s) availableÚoutputrk   Úresult)r=   r$   r<   r&   r   r?   r@   r   rˆ   rT   r‰   rV   r�   rŠ   r‹   rŒ   r�   r%   r}   ÚextendÚintÚjoin)r   rK   r)   rV   r“   r›   r•   r–   ÚlinesÚlabelr   r?   rT   r…   r�   s   &&&        @@@@r   r   r   k   s�  ûé € ô ˆ6ƒ{�l IÐ.×.Ô.´jÀÇÁÔQT×6UÒ6UÐ]`×]k×]kÐ]kÜÐ 0Ó1Ð1Ø×$Ñ$€IØ
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Üˆj˜vÐ'8Ô9Ý7ßFÙ˜y×/Ñ/°×1CÑ1CÀCÇNÁNÕ1S×1ZÑ1ZÓ[€F÷#ð #ô ×$Ò$ VÓ,×,€FØ—Z‘Z Ó(×.Ð.¨B°·
±
¸9Ó0E×0KÐ0KÈˆ7Ø"Ð#¯U·g¡rÐD]ÐC^Õ_€EØ)¨5Ð1Ð4EÀwÐ3OÓP‰ˆß‰5Ø�L‰L˜ÔØ�L‰LÑIÁ5ÓIÖIñ Qð 
‡L�L”C˜Ÿ
™
 7Ó+×0Ð0¨qÓ1Ð2Ð2EÐFÔGØ�d—i‘i Ó&¨°&Ð9Ð9ñ -ùs8   †AG-ÁB2G-ÄG+ÄG-Ä"G-Ä<G-ÅG-Å3AG-Ç$G-c              ƒ  ó8  "  € \        V4      0 Rm,
          '       gi   VP                  '       dW   \        ;QJ d*    R VP                  4        4       F  '       g   K   RM	  RM! R VP                  4        4       4      '       d   \	        R4      hVP                  V P
                  9  d   \	        R4      h\        WVR	4       ^ R
IHp V P                  pV! VP                  VP                  VP                  ,          P                  4      pVf   \	        R4      h^ RIHp RVP                  RVP                   /p \"        P$                  ! VP&                  WrP)                  RR4      VP)                  RR4      VP)                  RR4      R7      G Rj  x€L
 w  r‰TP/                  Yx4      pRRRTP0                  R\3        T4      RTRRTP5                  T4       2RT	/#  LJ  \*         d   p
\	        R4      T
hRp
?
i\,         d   p
\	        R4      T
hRp
?
ii ; i5i)aT  Desktop's non-image attachment: stage the file for this session (its frozen launch cwd and
the owner profile's ``attachments/``) and hand back the ``@file:`` ref its next submit carries.
The sidecar handler looked the session up in its own table, which never holds an authority
session, so every file drop failed with ``session not found``.ÚpathÚdata_urlr   c              3   óL   "  € T F  p\        V\        4      '       * x € K  	  R # 5ir#   )r$   r&   )r'   Úvalues   & r   r*   Úattach_file.<locals>.<genexpr>Ž   s   é € ÐK¹?°%”z %¬Ó-×-Ñ-»?ùr™   TFr,   Úpermission_deniedzsession:submitrU   N)ÚserverÚcwdÚprofile_homerj   )Úraw_pathr£   r   Ústorage_unavailableÚattachedÚref_pathÚref_textz@file:Úuploaded>   r   r¢   r   r£   r<   )r=   r<   r>   Úvaluesr   Úsubscriptionsr   r‰   rV   r?   rŠ   r@   r‹   Útui_gatewayr¨   r©   Ú
profile_idrŒ   r�   Ú_stage_session_file_attachmentr%   Ú
ValueErrorÚOSErrorÚ_attachment_ref_pathr   r&   Ú_format_ref_value)r   rK   r)   rV   r?   r…   r¨   ÚsessionÚstoredr°   Úexcr®   s   &&&         r   r   r   ˆ   sÎ  é € ô
 	ˆF‹ÒK×KÔKÐSV×Sa×SaÐSaß‹sÑK¸6¿=¹=¼?ÓK�s�sŠsÑK¸6¿=¹=¼?ÓK×KÒKÜÐ 0Ó1Ð1Ø
‡~�~˜Z×5Ñ5Ô5ÜÐ 3Ó4Ð4Üˆj˜vÐ'7Ô8Ý8Ø×$Ñ$€IÙ˜y×/Ñ/°×1CÑ1CÀCÇNÁNÕ1S×1ZÑ1ZÓ[€FØ‚~ÜÐ 3Ó4Ð4å"Ø�f—j‘j .°)×2FÑ2FÐG€Gð@Ü!(×!2Ò!2Ø×1Ñ1°7ÇZÁZÐPVÐXZÓE[Ø—Z‘Z 
¨BÓ/°f·j±jÀÈÓ6Lô"N÷ NÑˆð ×*Ñ*¨7Ó;€HØ˜˜f f§k¡k°6¼3¸v»;È
ÐT\Ø˜& ×!9Ñ!9¸(Ó!CÐ DÐEÀzÐS[ð]ð ]ñNøô ô ;ÜÐ 0Ó1°sÐ:ûÜô @ÜÐ 5Ó6¸CÐ?ûð@üsf   ‚,H¯
HºHÁ(HÂB7HÄ=AG! ÆGÆG! ÆAHÇG! Ç!HÇ,G8Ç8HÈHÈHÈHÈHr   Fc             ƒ  ód  a"  € RR0V'       d   R0M	\        4       ,          p\        S4      V,
          '       go   \        VP                  \        4      '       dO   VP                  '       d=   V'       d@   \        SP	                  R4      \        4      '       d   SR,          '       g   \        R4      hV P                  pVP                  VP                  9  d   \        R4      h\        WSR4       VP                  VP                  ,          pVP                  P                  ;_uu_ 4        VP                  P                  P                  4        UUu. uF  w  rxVR,          R8X  g   K  Wx3NK  	  p	ppR	R	R	4       V'       d;   ^ R
IHp
 \!        V3R lX	 4       R	4      pRVR	J;'       d    V
! VSR,          4      /# RX	 UUu. uF@  w  r¸RVR,          RVR,          RVR,          R\#        VR,          4      RRVR,          9   /NKB  	  upp/# u uppi   + '       g   i     L©; iu uppi 5i)a>  The Desktop's approval replay (``approval.pending``) and card ack (``approval.received``)
over the owner's generation-bound prompt projection. Left to the legacy sidecar they answered
``session not found`` for every authority session, which the renderer reads as a reaped
runtime and answers with a mid-turn re-resume.r<   r   Ú
request_idr,   r-   rR   r   ÚapprovalN)Úack_gateway_approvalc              3   óZ   <"  € T F   w  rVR ,          SR,          8X  g   K  Vx € K"  	  R# 5i)Ú	prompt_idr¾   Nrc   )r'   ÚrouteÚpromptr)   s   &  €r   r*   Úapprovals.<locals>.<genexpr>º   s(   øé € Ðh±¡ ¸FÀ;Õ<OÐSYÐZfÕSgÑ<g—e’e³ùs   ƒ+¡
+Úacknowledgedr   rÂ   Úcommandri   ÚchoicesÚallow_permanentÚalways)r=   r$   r<   r&   r%   r   r?   r@   r   rA   rB   ÚcontrolsÚpendingr±   Útools.approvalrÀ   rD   rt   )r   rK   r)   r   rL   r?   rM   rÃ   rÄ   rÌ   rÀ   Ú_s   &&f$        r   r   r   ¨   sÖ  øé € ð
 ˜IÐ&¿C¨<©.ÄSÃUÕK€FÜˆF‹�f×Ô¤J¨s¯~©~¼s×$CÒ$CÈ3Ï>Ï>È>ßœZ¨¯
©
°<Ó(@Ä#×FÒFÈfÐUa×NbÔNbÜÐ 0Ó1Ð1Ø×$Ñ$€IØ
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Üˆj˜v ~Ô6Ø×Ñ˜cŸn™nÕ-€DØ	×	Ñ	×	×	Ó	Ø8<¿¹×8MÑ8M×8TÑ8TÔ8VÔwÑ8V¡} uÐZ`ÐagÕZhÐlvÑZv”?�E“?Ñ8VˆÑw÷ 
 ç
Ý7ÜÔh±ÓhÐjnÓoˆØ ¨TÐ 1× gÐ gÑ6JÈ5ÐRXÐYeÕRfÓ6gÐhÐhØá^eôgá^eÑQZÐQRð (¨°Õ)<¸iÈÐPYÕIZØ(¨&°Õ*?ÀÌDÐQWÐXaÕQbÓLcØ,¨h¸&ÀÕ:KÑ.KóMá^eògð hð hùó x÷ 
 ×	üógùsb   ƒA(H0Á,H0Á43H0Â(BH0Ä-(HÅH
Å,H
Å3HÅ6H0Æ'H0Æ.H0ÇAH*ÈH0ÈHÈH'	È"H0c             ƒ   ó  "  € R R0VR8X  d   R0M	\        4       ,          p\        V4      V,
          '       gn   \        VP                  \        4      '       dN   VP                  '       d<   VR8X  d@   \        VP	                  R4      \        4      '       d   VR,          '       g   \        R4      hV P                  pVP                  VP                  9  d   \        R4      h\        WVR4       VP                  VP                  ,          pVP                  P                  ;_uu_ 4        VR8X  d   R\        WQ4      /uuRRR4       # \        WQ4       \        WQVR	8H  R
7      w  rxVR	8X  dF   R	V U	U
u. uF(  p	\         U
u/ uF  qªV	P	                  V
4      bK  	  up
NK*  	  up
p	R. /uuRRR4       # VR8X  d   \        W‚R,          4      uuRRR4       # R\!        WQWx4      /uuRRR4       # u up
i u up
p	i   + '       g   i     R# ; i5i)r<   r   r
   r    r,   r-   rR   r   Nr	   )Úinclude_fallback_evictedÚdelegationsr   )r=   r$   r<   r&   r%   r   r?   r@   r   rA   rB   Úcontrol_snapshotrC   rE   Ú_SUBAGENT_FIELDSÚsubagent_tailÚprocess_snapshot)r   rK   r)   r   rL   r?   rM   r0   ÚrecordsrP   rh   s   &&&$       r   r   r   Á   sº  é € Ø˜IÐ&¸TÀV¼^¨=©/ÔQTÓQVÕW€FÜˆF‹�f×Ô¤J¨s¯~©~¼s×$CÒ$CÈ3Ï>Ï>È>Ø˜”¬
°6·:±:¸mÓ3LÌc×(RÒ(RØ*0°×*?Ô*?ÜÐ 0Ó1Ð1Ø×$Ñ$€Ià
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Üˆj˜v ~Ô6Ø×Ñ˜cŸn™nÕ-€DØ	×	Ñ	×	×	Ó	Ø�9Ôð Ô/°	Ó?Ð@÷	 
 Ò	ô
 	˜yÔ.Ü'¨	ÐQUÐYdÑQdÔe‰ˆØ�;ÔØÙ07ô"9Ù07 fõ DTÓ"TÑCS¸C¨¯
©
°3«Ò#7ÑCSÔ"TÙ07ò"9Ø:GÈðM÷ 
 Ò	ð �6Œ>Ü  °Õ*?Ó@÷ 
 Ò	ð Ô-¨i¸eÓMÐN÷ 
 Ò	ùò #Uùó "9÷ 
 ×	Ð	üss   ‚A'HÁ*:HÂ%BHÄ*G8Ä>HÅ	*G8Å3G2Æ G-ÆG2Æ!G8Æ'HÆ2G8Ç
HÇG8Ç"HÇ-G2Ç2G8Ç8H		È	Hc               óì  € V P                   pVP                  VP                  9  d   \        R4      h\	        WVR4       VP                  VP                  ,          pVP
                  P                  ;_uu_ 4        \        WA4       \        WA4      w  rg\        P                  P                  R4      pVf   R. 3uuRRR4       # VP                  p	\        WAWg4      w  r«V	P                  ;_uu_ 4        T	\        WšV4       Uu. uF  qÃ! V4      '       g   K  VP                   NK   	  up3uuRRR4       uuRRR4       # u upi   + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)z§``(registry, ids)``: the session's own processes (what ``process.list`` shows) that
``select(process)`` keeps; ``(None, [])`` when no process was ever registered here.r-   r.   útools.process_registryN)r?   r<   r@   r   r   rA   rB   rC   rE   ÚsysÚmodulesr%   Úprocess_registryÚ
_ownershipÚ_lockÚ_owned_lockedÚid)r   rK   r)   Úselectr?   rM   r0   rÖ   ÚmodulerO   ÚkeysÚownersÚps   &&&$         r   Ú_owned_targetsrå   Ü   s  € ð ×$Ñ$€IØ
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Üˆj˜vÐ'8Ô9Ø×Ñ˜cŸn™nÕ-€DØ	×	Ñ	×	×	Ó	Ü˜yÔ.Ü'¨	Ó7‰ˆÜ—‘—‘Ð!9Ó:ˆØŠ>Ø˜�8÷ 
 Ò	ð ×*Ñ*ˆÜ! )°%ÓA‰ˆØ�^�^‹^Ø¬M¸(È&Ô,QÓ_Ñ,Q qÐU[Ð\]×U^œd˜aŸdœdÑ,QÑ_Ð_÷ ‰^÷ 
 Ò	ùò `÷ �^úˆ^÷ 
 ×	×	Ò	úsB   Á;?E"Ã.E"Ã3E	ÄD?ÄD?Ä'E	Ä*
E"Ä?E	ÅEÅE"Å"E3	c              ƒ  ó”  a"  € \        S4      0 Rm,
          '       gG   VP                  '       d5   \        SP                  R4      \        4      '       d   SR,          '       g   \        R4      h\        WSV3R lR7      w  r4V'       g   \        R4      h\        P                  ! VP                  V^ ,          4      G Rj  x€L
 #  L5i)a  Desktop's per-process Stop: one process THIS session owns (the ``process.list`` rule); any
other id, another chat's included, is ``process_not_found``. The legacy sidecar handler looked the
session up in its own table, which never holds an authority session.Ú
process_idr,   c                 ó0   <€ V P                   SR ,          8H  # )rç   )rß   )rä   r)   s   &€r   re   Úkill_process.<locals>.<lambda>÷   s   ø€ ÈQÏTÉTÐU[Ð\hÕUiÒMirg   ©rà   Úprocess_not_foundN>   r   rç   r<   )
r=   r<   r$   r%   r&   r   rå   rŒ   r�   r   )r   rK   r)   rO   Úidss   &&f  r   r   r   ð   s�   øé € ô 	ˆF‹Ò=×=Ô=ÀSÇ^Ç^À^Ü˜fŸj™j¨Ó6¼×<Ò<ÀFÈ<×DXÔDXÜÐ 0Ó1Ð1Ü" :°FÔCiÔj�M€HßäÐ 3Ó4Ð4Ü×"Ò" 8×#8Ñ#8¸#¸a½&ÓA×AÐAÑAùs   ƒ,C°3CÁ$ACÃCÃCc              ƒ  óÆ  aa"  € \        V4      0 R(m,
          '       d   \        R4      hRV P                  P                  9  d   \        R4      hVP	                  R4      RJd   RRR	R
/# ^ RIHo ^ RIHo VV3R lp\        P                  ! V4      G Rj  x€L
 w  rEp/ VCRVP	                  R. 4       Uu. uF  qwV9  g   K  VNK  	  up/Cp^ RIHp V P                  P                  p	\        \!        V	P"                  RR4      4      p
V	P%                  W¨! V P                  P&                  4      4       \)        WV4      G Rj  x€L
 pVP	                  R4      '       d   \+        W4      G Rj  x€L
 MRpV'       dd   VR8w  d]   VP	                  R4      '       gF   VR,          '       g7   VP	                  R4      V8w  d!   \        RRRRP-                  V4       2R7      hRP-                  R VP/                  4        4       4      ;'       g    RpRRRR/P	                  T;'       g    RR4      pV'       d   R RP-                  V4       2MRpV'       d<   R!\        P                  ! \0        V P                  VP2                  V4      G Rj  x€L
 /M/ pRR"R	R#V R$V V 2/V'       d   R%V/M/ CV'       d   R&V/M/ CV'       d   R'V/CVC# / CVC#  EL:u upi  EL” ELm LR5i))a  Desktop's MCP add / toggle / repair: bring THIS profile's live MCP servers in step with its
config (the owner's housekeeping reconcile, run now) and refresh this profile's cached agents.
Never the sidecar's teardown of every server, which cut every chat's in-flight MCP calls. The calling
session's MCP servers then change as a new policy generation when it is idle (``session``: applied,
unchanged or busy); other sessions take theirs when next attached. A configured server that did not
connect is named: a refusal when nothing took effect (no server registered or removed, no session
generation), else ``unavailable`` beside the success. A call naming ``rev``, the revision the session
already holds, is that same nothing-left-to-load, answered as success with ``loaded_rev``.ÚconfirmÚrevr,   r.   r§   Tr9   Úconfirm_requiredÚmessagez3Reloading MCP refreshes every chat of this profile.)Úsuppress_interactive_oauth)Úmcp_tool_discoveryc                  ó¾   <€ S! 4       ;_uu_ 4        S P                  4       S P                  4       S P                  4       3uuR R R 4       #   + '       g   i     R # ; ir#   )Ú!reconcile_mcp_servers_with_configÚmcp_servers_not_connectedÚmcp_servers_ready)Ú	discoveryrò   s   €€r   Ú	reconcileÚreload_mcp.<locals>.reconcile  sC   ø€ Ù'×)Õ)Ø×?Ñ?ÓAÀ9×CfÑCfÓChØ×/Ñ/Ó1ð3÷ *×)×)Ó)ús   ‘/AÁA	Nr•   )Úserved_profile_nameÚmultiplex_profilesFrj   Úappliedr–   Úmcp_servers_unavailableÚmcp_serverszdid not connect: ú, )ÚfieldÚdetailc              3   óf   "  € T F'  w  rV'       g   K  V R RP                  V4       2x € K)  	  R# 5i)z: r   N)rž   )r'   r(   Úvs   &  r   r*   Úreload_mcp.<locals>.<genexpr>$  s*   é € ÐO¹>±4°1ÌQÔ.˜1˜#˜R §	¡	¨!£˜~Õ.»>ùs   ‚1“1zno server changesz-; this chat's tools changed for its next turnÚbusyzm; this chat is busy: its new tools apply once the turn finishes and reload runs again or the chat is reopenedz; did not connect: Úsession_serversÚreloadedzMCP servers reconciled (r6   Ú
loaded_revrº   Úunavailable>   rï   rî   r   r<   )r=   r   ÚactorÚcapabilitiesr%   Útools.mcp_oauthrò   rH   ró   rŒ   r�   rˆ   rû   r?   rŠ   rG   rr   rs   Ú!_mcp_reload_refresh_cached_agentsr´   Ú_commit_session_mcpÚ_held_mcp_revrž   r   Ú_session_serversr<   )r   rK   r)   rù   r›   ÚfailedÚreadyr   rû   rŠ   Ú	multiplexrº   Úheld_revÚchangedÚnoter
  Úselectedrø   rò   s   &&&              @@r   r   r   þ   sÞ  ùé € ô ˆ6ƒ{Ò@×@Ô@ÜÐ 0Ó1Ð1Ø 
× 0Ñ 0× =Ñ =Ô=ÜÐ 3Ó4Ð4Ø‡z�z�)Ó DÓ(ØÐ,¨iÐ9nÐoÐoÝ:Ý5ö3ô #*×"3Ò"3°IÓ">×>Ñ€F�Eàb�Ðb˜°6·:±:¸gÀrÔ3JÓ!aÑ3J¨4ÐZ`ÑN`§$ $Ñ3JÑ!aÑb€FÝ?Ø×!Ñ!×(Ñ(€FÜ”W˜VŸ]™]Ð,@À%ÓHÓI€IØ
×,Ñ,¨YÐ8KÈJ×L`ÑL`×LkÑLkÓ8lÔmÜ'¨
¸Ó@×@€GØ7=·z±zÀ%×7HÒ7H”] :Ó3×3Ð3Èb€H÷ 	�7˜iÔ'°·±¸I×1FÒ1FÈ&ÐQXÏ/Ì/Ø—
‘
˜5Ó! XÔ-ÜÐ 9ÀØ):¸4¿9¹9ÀVÓ;LÐ:MÐ'NôPð 	Pà�i‰iÑO¸6¿<¹<¼>ÓOÓO×fÐfÐSf€GØÐGØð .ð/ç/2©s°7·=°=¸bÀ"Ó/Eð 	÷ @FÐ'¨¯	©	°&Ó(9Ð':Ñ;È2€KçFMð "¬×):Ò):Ô;KÈZ×MaÑMaÐcf×cqÑcqØ;@ó*B÷ $Bñ CØSUð à�j )Ð/GÈÀyÐPQÐRVÐQWÐXcÐWdÐ-eð tß+3�˜hÑ'¸ðtç'.�	˜7Ñ#°BðtçW]¸]ÈFÐ<Sðtàjrðtð tàceðtàjrðtð tò/ ?ùâ!aò
 AÚ3ñ$Bùsž   „BK!ÂKÂK!Â7KÃKÃ
A;K!ÅKÅK!Å!K!Å/KÅ0K!Å>K!ÆK!Æ+A"K!ÈK!È)K!È9K!É5K!ÊKÊK!Ê)K!Ê7K!ËK!ËK!ËK!ËK!c              ƒ  óŠ  "  € \        VRR4      pV'       d&   V P                  P                  P                  V4      MRpVe   VP                  f   R# ^ RIHp V! V P                  P                  VP                  4      p\        P                  ! \        \        V P                  P                  4      V4      G Rj  x€L
 #  L5i)uW  The ``mcp_rev`` this session's committed policy already holds â€” the value ``config.get mtime`` shipped
the client â€” or ``''`` when the call names no live local session. The policy is read on the loop (it
walks ``authority.sessions`` and the adapter's maps, which only the loop mutates); only the config read
and hash go to a worker thread.r<   Nrj   rU   )rr   r?   r@   r%   r‹   r‰   rV   rŠ   rŒ   r�   Ú_mcp_revision_in_scoper   r´   )r   rK   ÚsidrM   rV   r…   s   &&    r   r  r  0  s“   é € ô
 �#�| TÓ
*€Cß58ˆ:×Ñ×(Ñ(×,Ñ,¨SÔ1¸d€DØ‚|�t—{‘{Ò*ÙÝ8Ù˜z×3Ñ3×:Ñ:¸D¿K¹KÓH€FÜ×"Ò"Ô#9¼4À
×@TÑ@T×@_Ñ@_Ó;`ÐbhÓi×iÐiÑiùs   ‚B:CÂ<CÂ=Cc                 óž   € ^ RI Hp ^ RIHp ^ RIHp V! V 4      ;_uu_ 4        V! W! 4       4      uuRRR4       #   + '       g   i     R# ; i)rX   )Ú_profile_runtime_scope)Úmcp_revision)Úload_configN)Úgateway.runr  Úgateway.session_configr  Úhermes_cli.configr  )Úhomer…   r  r  r  s   &&   r   r  r  >  s1   € Ý2Ý3Ý-Ù	 ×	%Õ	%Ù˜F K£MÓ2÷ 
&×	%×	%Ó	%ús	   £;»A	c                ó  € ^ RI p^ RIHp ^ RIHp ^ RIHp V! V! V P                  V4      R,          4      p\        \        VP                  4      V! VP                  VP                  4      4      ,          \        V4      ,          4      # )a/  The profile MCP servers the session's committed policy runs (its toolsets name them) that are *ready*
(live or lazy): a server connected for the profile is not one a chat with ``no_mcp``, an explicit pick or
a platform allowlist enabled, and one the policy names but that parked serves the chat nothing.N)Úrestore_policy)Úenabled_mcp_server_names©Úlocal_receiptr…   )Újsonr‰   r%  Úhermes_cli.tools_configr&  Úhermes_state_localr(  Údbrx   r=   rq   ÚloadsÚconfig_json)r?   r  r  r)  r%  r&  r(  r…   s   &&&     r   r  r  F  sd   € ó Ý5Ý@Ý0Ù™M¨)¯,©,¸Ó<¸XÕFÓG€FÜ”#�f—o‘oÓ&Ñ)AÀ$Ç*Á*ÈV×M_ÑM_ÓB`Ó)aÕaÔdgÐhmÓdnÕnÓoÐorg   c              ƒ  ó¼  "  € ^ RI Hp V P                  \        VRR4      rTV'       d   VP                  P                  V4      MRpVe4   VP                  e&   VP                  P                  VP                  8w  d   R# \        WVR4       ^ RI
Hp  V! WARR7      G Rj  x€L
 '       d   R# R	#  L  \         d   pTP                  R9  d   h  Rp?R
# Rp?ii ; i5i)zšThe calling local session's MCP servers as a gateway-committed generation (``commit_refresh``):
never a running or queued turn's, never another session's.©ÚPlatformr<   Nr.   )Úcommit_refreshT)Úmcp_onlyrý   Ú	unchangedr  >   Úsession_busyÚrevision_conflictÚunknown_execution)Úgateway.configr1  r?   rr   r@   r%   r‹   rv   ÚLOCALr   Úgateway.session_policy_refreshr2  r   Úreason)	r   rK   r)   r1  r?   r  rM   r2  r¼   s	   &&&      r   r  r  R  sµ   é € õ (Ø×)Ñ)¬7°3¸ÀdÓ+Kˆsß*-ˆ9×Ñ×!Ñ! #Ô&°4€DØ‚|�t—{‘{Ò*¨d¯k©k×.BÑ.BÀhÇnÁnÔ.TÙÜˆj˜vÐ'8Ô9Ý=ðÙ"0°È$Ô"O×OÖOˆyÐ`ÐU`Ð`ÑOøÜô Ø�:‰:ÐWÔWØÝûðüsT   ‚BCÂB1 Â B/Â!	B1 Â+B1 Â,CÂ-B1 Â.CÂ/B1 Â1CÂ<CÃCÃCÃCc              ƒ  óª  aa"  € \        V4      RR0,
          '       g3   \        VP                  \        4      '       d   VP                  '       g   \	        R4      h\        WVR R7      w  ooVV3R lpS'       d   \        P                  ! V4      G Rj  x€L
 M^ pRTR	\        P                  ! \        V P                  V4      G Rj  x€L
 /#  L8 L5i)
aW  Ink ``/stop``: kill the background processes this session owns (what ``process.list``
shows), never the registry-wide ``kill_all`` the legacy sidecar ran, which on the shared owner
reached every chat, Desktop window and served profile (dokterdok N2). An explicit stop, so a
``persist_on_release`` job of THIS session is still reached (#41225).r<   r   r,   c                 óL   € V P                   '       * ;'       g    V P                  # r#   )ÚexitedÚ_scope_stop_pending)rä   s   &r   re   Ú stop_processes.<locals>.<lambda>l  s   € ¸A¿H¹H¼×8]Ð8]È×H]ÑH]Ð8]rg   rê   c            	      óx   <€ S U u. uF  p SP                  V R RR7      NK  	  pp \        R V 4       4      # u up i )r   F)r‹   Úconsume_outputc              3   ód   "  € T F&  pVP                  R 4      R9   ;'       d    RV9  x € K(  	  R# 5i)r9   Úscope_stop_failedN>   ÚkilledÚalready_exitedr1   ©r'   r2   s   & r   r*   Ú/stop_processes.<locals>.kill.<locals>.<genexpr>p  s7   é € ð %Ù#�qð —5‘5˜“?Ð&BÑB×cÐcÐGZÐbcÑGcÔcÛ#ùs   ‚0¢0)r   Úsum)ÚpidÚresultsrO   Útargetss     €€r   ÚkillÚstop_processes.<locals>.killn  sM   ø€ ÙfmÓnÑfmÐ_b�8×(Ñ(¨°^ÐTYÐ(ÖZÑfmˆÐnÜñ %Ù#ó%ó %ð 	%ùò os   †7NrE  rÑ   )
r=   r$   r<   r&   r   rå   rŒ   r�   Ú_interrupt_delegationsr?   )r   rK   r)   rM  rE  rO   rL  s   &&&  @@r   r   r   d  s¯   ùé € ô
 ˆ6ƒ{�l IÐ.×.Ô.´jÀÇÁÔQT×6UÒ6UÐ]`×]k×]kÐ]kÜÐ 0Ó1Ð1Ü& z¸Ù.]ô_Ñ€Hˆgö%÷ /6”7×$Ò$ TÓ*×*Ð*¸1€FØ�f˜m´7×3DÒ3DÔE[Ð]g×]qÑ]qÐsvÓ3w×-wÐxÐxñ +Ù-wùs+   „ACÁACÂCÂ2CÃ	C
Ã
CÃCc                óÐ   € \         P                  P                  R4      pVf   ^ # VP                  V P                  VP
                  ,          P                  \        W4      RR7      # )z¥Main's ``/stop`` also interrupted the background (async) delegations; here only the ones this
session dispatched (its route or its durable id), never another chat's.ztools.async_delegationz/stop)Úsession_keyÚparent_session_idr;  )rÙ   rÚ   r%   Úinterrupt_for_sessionr@   r<   rÃ   Úphysical_target)r?   rK   rá   s   && r   rO  rO  v  s[   € ô �[‰[�_‰_Ð5Ó6€FØ‚~ÙØ×'Ñ'°I×4FÑ4FÀsÇ~Á~Õ4V×4\Ñ4\Ü:IÈ)Ó:YÐbið (ó kð krg   c                óp  € V P                   VP                  ,          p\        W4      pV P                  P                  pVP
                  ;_uu_ 4        VP                  P                  VP                  4      pVe   VP                  V8w  d   \        R4      h RRR4       R#   + '       g   i     R# ; i)zTThe route still serves this conversation (a reused route must not lend its objects).NÚstale_generation)
r@   r<   rT  rŠ   Úsession_storerÝ   Ú_entriesr%   rÃ   r   )r?   rK   rM   ÚtargetÚstoreÚentrys   &&    r   rC   rC   €  s�   € à×Ñ˜cŸn™nÕ-€DÜ˜YÓ,€FØ×Ñ×*Ñ*€EØ	��‹Ø—‘×"Ñ" 4§:¡:Ó.ˆØŠ=˜E×,Ñ,°Ô6Ü#Ð$6Ó7Ð7ð 7÷ 
��Šús   ÁAB$Â$B5	rÐ   c          	     ó4  € ^ RI Hp V! W4      e   \        R4      hV P                  V4      pV'       d   \	        W4      MRpV'       d(   V P
                  VP                  ,          P                  MRpV'       d   \        V RR4      MRpV\        WEWvVR7      3# )zØ``(agent, subagent records)`` of this in-process session. Process-local registries cannot
describe (or stop) another interpreter's live objects: a managed worker is refused rather than
answered with an empty success.)Úmanaged_policyNÚunsupported_projectionr,  )r<   Ú
session_dbrÃ   rÐ   )
Úgateway.session_managed_workerr]  r   r0   rT  r@   r<   rÃ   rr   Úsubagent_records)r?   rK   rÐ   r]  r0   r<   rÃ   r_  s   &&$     r   rE   rE   ‹  sŠ   € õ >Ù�iÓ%Ò1ÜÐ 8Ó9Ð9Ø�O‰O˜CÓ €Eß4L” Ô0ÐRV€Jß8PˆI×Ñ˜sŸ~™~Õ.×4Ò4ÐVZ€Eß3K”˜ D¨$Ô/ÐQU€JØÔ"Ø°Ø!9ô;ð ;ð ;rg   c                 ó  € ^ RI Hp V P                  VP                  ,          P                  P
                  VP                  8X  d2   ^ RIHp V! V P                  VP                  4      R,          R,          # VP                  # )rX   r0  r'  r[  r<   )
r8  r1  r@   r<   r‹   rv   r9  r+  r(  r,  )r?   rK   r1  r(  s   &&  r   rT  rT  ›  sX   € Ý'Ø×Ñ˜#Ÿ.™.Õ)×0Ñ0×9Ñ9¸X¿^¹^ÔKÝ4Ù˜YŸ\™\¨3¯>©>Ó:¸7ÕCÀLÕQÐQØ�>‰>Ðrg   c                 ó  € ^ RI Hp ^ RIHp ^ RIHp ^ RIHpHpH	pH
pHp	 \        W4      p
V P                  P                  V
4      ;'       g    T
p
. pRV3RV3RV33 FY  w  rÍV P                  P                  VR,           V
,           4      p TP!                  V'       d   VP#                  V4      MR	4       K[  	  Vw  pppV! V4      p\-        T;'       d+    VR,          R8H  ;'       d    VP/                  R4      '       * 4      pT! T\-        T;'       d    T;'       d    VP0                  R8H  4      R7      pV! V4      pRVRVRVRV! VVV4      RV	! V!  /#   \$        \&        \(        3 d   p\+        R
4      ThR	p?ii ; i)rX   )Ú	GoalState)Ú	LoopState)ÚHeartbeatState)Ú_safe_goal_snapshotÚ_safe_loop_snapshotÚ_safe_heartbeat_snapshotÚ_snapshot_revisionÚ_snapshot_updated_atÚgoalÚloopÚ	heartbeatÚ:Nr¬   r9   ÚactiveÚwait_barrier)Údeferred_by_goalÚrevisionÚ
updated_at)Úhermes_cli.goalsrd  Úhermes_cli.loopsre  Úhermes_cli.heartbeatrf  Ú#tui_gateway.methods_session_controlrg  rh  ri  rj  rk  rT  r,  Úget_compression_tipÚget_metar}   Ú	from_jsonr¶   Ú	TypeErrorÚAttributeErrorr   rG   r%   r9   )r?   rK   rd  re  rf  rg  rh  ri  rj  rk  rY  Ústatesr   ÚclsÚrawr¼   Ú
goal_stateÚ
loop_stateÚheartbeat_staterl  Údeferredrm  rn  s   &&                     r   rÒ   rÒ   £  s�  € Ý*Ý*Ý3÷õ ô
 ˜YÓ,€FØ�\‰\×-Ñ-¨fÓ5×?Ð?¸€FØ€FØ˜yÐ)¨F°IÐ+>ÀÈnÐ@]Ó^‰	ˆØ�l‰l×#Ñ# D¨3¥J°Õ$7Ó8ˆð	DØ�M‰M·˜#Ÿ-™-¨Ô,¸Ö>ñ _ð /5Ñ+€J�
˜OÙ˜zÓ*€Dô �D×XÐX˜T (�^¨xÑ7×XÐXÀÇÁÈÓ@XÔ<XÓY€HÙ˜z¼DØ×AÐA�Z×AÐA J×$5Ñ$5¸Ñ$Aó=Cô D€Dá(¨Ó9€IØ�D˜& $¨°YØÑ*¨4°°yÓAØÑ.°Ñ7ð9ð 9øô œI¤~Ð6ô 	DÜ#Ð$9Ó:ÀÐCûð	Dús   Â*EÅFÅ0E<Å<Fc                 ó&  € V'       g   R # T p\        \        VR^4      4       Fê  pVe   \        VRR4      MRp\        V4      '       d   V! 4       MRpVf    R # \        VRR 4      pVRJ g*   \        V\        4      '       d   \        V4      '       g   Ks  \        VRR4      V9  d   K‡  Vf   \        VRR4      e   \        VRR4      VJd   K­  Ve	   Wƒ8w  d   K¹  Vf-   \        V\        4      '       d   \        VRR4      RV39  d   Ké   R# 	  R # )	FÚ_MAX_ANCESTOR_HOPSNÚ_delegate_parent_refÚ_evicted_on_fallbackTr<   Ú_session_dbÚgateway_session_key)Úrangerr   Úcallabler$   r&   rG   )	r0   Útarget_sidsÚexpected_dbrÃ   rO   ÚcurrentrÎ   rK   Úmarkers	   &&&&&    r   Ú_has_fallback_evicted_ancestorr‘  Ä  s  € ßÙØ€GÜ”7˜8Ð%9¸1Ó=Ö>ˆØ@GÒ@SŒg�gÐ5°tÔ<ÐY]ˆÜ# CŸ=š=‘#”%¨dˆØŠ?ÚÜ˜Ð"8¸%Ó@ˆØ˜$“¤:¨f´c×#:Ò#:¼tÀF¿|º|ÙÜ�7˜L¨$Ó/°{ÔBÙØÒ#¤w¨w¸ÀtÓ'LÒ'XÔ^eÐfmÐo|ð  Có  _Dð  LWó  _WÙØÒ ¤ÙØŠ=œZ¨´×4Ò4¼ÀÐJ_ÐaeÓ9fÐosÐu{Ðn|Ô9|ÙÚñ! ?ñ" rg   r_  rÃ   Tc                ó   € \         P                  P                  R 4      pV'       d   T;'       g    \        V RR4      MRpVe   V f   V'       g   . # Ve   TM\        V RR4      pVe   TM\        V RR4      p\	        Wv4      p	VP
                  ;_uu_ 4        VP                  P                  4        U
u. uFo  p
V e(   VP                  V
P                  R4      V 4      '       g7   \        V
P                  R4      W—W…4      '       g   \        W©V4      '       g   Kd  \        V
4      NKq  	  up
uuRRR4       # u up
i   + '       g   i     R# ; i)ztools.delegate_tool_registryr<   Nr‰  rŠ  r0   )rÙ   rÚ   r%   rr   Ú_compression_lineagerI   rJ   r±   Ú_is_descendant_ofr‘  Ú_owned_by_lineageÚdict)Úparentr<   r_  rÃ   rÐ   rO   Ú
target_sidrŽ  Úeffective_router�  rP   s   &&$$$      r   ra  ra  Ü  s  € Ü�{‰{�‰Ð=Ó>€HßH`�*×CÐC¤¨°¸dÓ CøÐfj€JØÒ˜FšN·:Øˆ	Ø *Ò 6‘*¼GÀFÈMÐ[_Ó<`€KØ$Ò0‘e´g¸fÐF[Ð]aÓ6b€Oä& {Ó?€KØ	×	(×	(Ó	(Ø+3×+EÑ+E×+LÑ+LÔ+Nó HÑ+N ØÒ&¨8×+EÑ+EÀfÇjÁjÐQXÓFYÐ[a×+bÒ+bÜ1°&·*±*¸WÓ2EÀ{Ðap×{Ò{Ü$ V¸+×Fô ”�V–Ñ+Nñ H÷ 
)Ò	(ùòH÷ 
)×	(Ð	(ús*   ÂD<Â5/D7Ã%1D7ÄD7Ä*D<Ä7D<Ä<E	c                ó  € V'       d   V P                  R4      V9  d   R# \        VRR4      p\        \        V P                  R4      RR4      RR4      pVRJ;'       d$    VRJ;'       d    \        V4      \        V4      8H  # )a·  The read-only roster follows the conversation, as ``delegate_task(action="list")`` does: a
child whose durable owner id is in this session's compression lineage, written to the same
session database file. Without it every cached-agent rebuild (``/reasoning``, ``/model``, a
policy refresh, idle eviction) hid still-running children from the dock while the status bar
kept counting them. Control and tail stay pinned to the resident parent.Úowner_agent_session_idFÚdb_pathNr0   r‰  )r%   rr   r&   )rP   r�  rŽ  Úexpected_pathÚ
child_paths   &&&  r   r•  r•  ì  sz   € ÷ ˜&Ÿ*™*Ð%=Ó>ÀkÔQÙÜ˜K¨°DÓ9€MÜœ §¡¨GÓ!4°mÀTÓJÈIÐW[Ó\€JØ Ð$×iÐi¨¸4Ð)?×iÐiÄCÈ
ÃOÔWZÐ[hÓWiÑDiÐirg   c                ó@  € V'       g   \        4       # V0Tr2\        V RR4      \        V RR4      rT\        V4      '       d}   \        V4      '       dl   V! V4      pV'       dQ   V! V4      '       dC   VR,          V9  d5   \        V4      ^È8  d%   VR,          pVP	                  V4       V! V4      pKX  \        V4      # \        V RR4      p\        V4      '       d	   V! V4      MRp\        \        V\        \        34      '       d   V4      V,          # R4      V,          # )z‘*session_id* plus the sessions it continues by compression, walked backward so a closed sibling under a compressed parent cannot divert the walk.Ú_is_compression_child_rowNÚget_sessionrR  Úget_compression_lineagerc   )Ú	frozensetrr   rŒ  r~   Úaddr$   rt   Útuple)	r,  r<   rì   r�  Úis_childr%   ÚrowÚlineager5   s	   &&       r   r“  r“  ù  sñ   € çÜ‹{ÐØ�< ˆÜ˜BÐ ;¸TÓBÄGÈBÐP]Ð_cÓDdˆcÜ�×Òœh sŸmšmÙ�'‹lˆß‘h˜s—m’m¨Ð,?Õ(@ÈÔ(KÔPSÐTWÓPXÐ[^ÔP^ØÐ-Õ.ˆGØ�G‰G�GÔÙ�g“,ŠCÜ˜‹~ÐÜ�bÐ3°TÓ:€GÜ#+¨G×#4Ò#4‰G�JÔ¸$€EÜœj¨´´u°×>Ò>�UÓGÈ#ÕMÐMÀBÓGÈ#ÕMÐMrg   c           	      ó  a€ R SRRRRRR/p\        V3R lV  4       R4      pV'       d   \        VP                  R4      R	R4      MRpV'       g   V#  \        VR
4      ;_uu_ 4       pVP	                  ^ ^4      pVP	                  \        ^ V\        ,
          4      4       VP                  \        4      P                  RRR7      pRRR4       / TCRRRXRX\        8„  /C#   + '       g   i     L#; i  \         d    Tu # i ; i)r    Ú	availableFr!   rj   Ú	truncatedc              3   óV   <"  € T F  qP                  R 4      S8X  g   K  Vx € K   	  R# 5i©r    Nr1   )r'   r2   r    s   & €r   r*   Ú subagent_tail.<locals>.<genexpr>  s!   øé € ÐM™g˜¯©¨}Ó)=ÀÑ)L—1’1›gùs   ƒ)Ÿ
)Nr0   Ú_live_transcript_pathÚrbzutf-8Úignore)ÚerrorsT)
rD   rr   r%   ÚopenÚseekÚmaxÚ_TAIL_BYTESr   Údecoder·   )rÖ   r    r›   rP   r¢   ÚstreamÚsizer!   s   &f      r   rÔ   rÔ     sð   ø€ Ø˜[¨+°u¸fÀbÈ+ÐW\Ð]€FÜÔM™gÓMÈtÓT€FßJPŒ7�6—:‘:˜gÓ&Ð(?ÀÔFÐVZ€DßØˆðÜ�$˜×Ô Ø—;‘;˜q !Ó$ˆDØ�K‰Kœ˜A˜t¤kÕ1Ó2Ô3Ø—;‘;œ{Ó+×2Ñ2°7À8Ð2ÓLˆD÷ ð XˆfÐW�k 4¨°°{ÀDÌ;ÑDVÑWÐW÷ ×ûô ô ØŠðús1   ÁC4 Á'AC!ÃC4 Ã!C1	Ã,C4 Ã1C4 Ã4DÄDc                ó(  € \        W4      pV P                  VP                  ,          P                  V0V0reVe   VP	                  \        VRR4      4       VP                  R V 4       4       VP                  R4       VP                  R4       WV3# )z ``(routing keys, owners)`` a registry process must match to belong to this session: its
routing key AND an owner among the session, its agent and its subagents.Nr<   c              3   óB   "  € T F  qP                  R 4      x € K  	  R# 5ir­  r1   rG  s   & r   r*   Ú_ownership.<locals>.<genexpr>"  s   é € Ð8±¨1—%‘%˜×&Ð&³ùs   ‚rj   )rT  r@   r<   rÃ   r¤  rr   ÚupdateÚdiscard)r?   rK   r0   rÖ   rY  râ   rã   s   &&&&   r   rÜ   rÜ     s~   € ô ˜YÓ,€FØ×&Ñ& s§~¡~Õ6×<Ñ<¸fÐEÈÀxˆ&ØÒØ�
‰
”7˜5 ,°Ó5Ô6Ø
‡M�MÑ8±Ó8Ô8Ø
‡N�N�4ÔØ
‡N�N�2ÔØˆ<Ðrg   c                ó  € . V P                   P                  4       OV P                  P                  4       O Uu. uF?  pVP                  V9   g   K  VP                  ;'       g    VP
                  V9   g   K=  VNKA  	  up# u upi )z•Matching process objects; the caller holds ``registry._lock``. Read directly:
``list_sessions`` refreshes recovered processes and writes checkpoints.)Ú_runningr±   Ú	_finishedrQ  Úowner_task_idÚtask_id)rO   râ   rã   rä   s   &&& r   rÞ   rÞ   (  s�   € ð S˜×*Ñ*×1Ñ1Ó3ÐR°h×6HÑ6H×6OÑ6OÓ6QÑRó SÑR�!Ø�}‰} Ñ$ô Ø*+¯/©/×*FÐ*F¸Q¿Y¹YÈ6Ñ)Q÷ ˆAÑRñ Sð Sùò Ss   ¹BÁBÁ$BÁ8Bc                 óV  € \         P                  P                  R 4      pVf   . # VP                  p\	        WW#4      w  rgVP
                  ;_uu_ 4        \        WVV4       Uu. uFœ  pRVP                  RVP                  R,          RVP                  '       d   RMRRVP                  R	VP                  R
VP                  ;'       g    RRVP                  '       d   VP                  MRRVP                  \        ) R /NKž  	  upuuRRR4       # u upi   + '       g   i     R# ; i)rØ   Nr<   rÇ   :NéÈ   Nr9   r>  ÚrunningÚ	exit_codeÚstarted_epochÚ	exited_atÚcompletion_reasonÚoutput_tail)rÙ   rÚ   r%   rÛ   rÜ   rÝ   rÞ   rß   rÇ   r>  rÇ  Ú
started_atrÉ  rÊ  Úoutput_bufferÚ_PROCESS_TAIL_CHARS)	r?   rK   r0   rÖ   rá   rO   râ   rã   rä   s	   &&&&     r   rÕ   rÕ   /  sü   € Ü�[‰[�_‰_Ð5Ó6€FØ‚~Øˆ	Ø×&Ñ&€HÜ˜i¨eÓ=�L€Dà	��‹ô R_Ð_gÐouÔQvóxñ
 RwÈAð ˜qŸt™t Y°·	±	¸$µØ q§x§x x™8°YÀÈQÏ[É[à  !§,¡,°¸Q¿[¹[×=PÐ=PÈDØ$¸Q¿X¿X¸X a×&9Ò&9È4Ø §¡Ô1DÐ0DÐ0EÐ FóHñ
 Rwñx÷ 
Šùòx÷ 
�ˆús0   ÁDÁ#6DÂ.DÃ	DÃ'DÄDÄDÄD(	)r    Ú	parent_idÚdepthrl  Údelegation_idÚmodelrÌ  r9   Ú
tool_countÚ	last_toolr8   r#   )*Ú__doc__rŒ   Ú	functoolsr   Úpathlibr   rÙ   Úgateway.session_busy_controlsr   Úhermes_state_runtimer   rÓ   r¶  rÎ  r   r   r   r   r   r   r   rå   r   r   r  r  r  r  r   rO  rC   rE   rT  rÒ   r‘  ra  r•  r“  rÔ   rÜ   rÞ   rÕ   rc   rg   r   Ú<module>rÚ     sý   ðñó Ý Ý Û 
å 3Ý 2ðÐ ð €ØÐ òBòfò4(*òV:ò:]ð@h°Eô hò2Oò6`ò(Bò/tòdjò3ò	pòò$yò$kò8ð;¸uô ;ò ò9òBñ0H¸Dð HÈð HÐgkõ Hò 
jòNò$Xò 
òSôxrg   