+
    jHàj×* ã                  óä  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	t	^ RI
HtHt ^ RIHtHt ^ RIHt ^ RIHt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! ^RIH"t# ^RIH$t% ^RIH&t' ^RIH(t) ^RIH*t*H+t+H,t, ^RI-H.t. ]P^                  ! ]04      t1]2! 4       t3/ t4R]5R&   ]Pl                  ! 4       t7RRRR/t8R•t9R R lt:R R lt;R R lt<R R  lt=R! R" lt>]?! R#R$04      t@R% R& ltAR' R( ltBR) R* ltCR+ R, ltDR- R. ltER/ R0 ltF] ! R1 R24      4       tG] ! R3 R44      4       tH] ! R5 R64      4       tI] ! R7 R84      4       tJ] ! R9 R:4      4       tKR;tLR< R= ltM ! R> R?4      tNR@ RA ltORB tPRC RD ltQRE RF ltRRG RH ltSRIsTRJ RK ltURL RM ltVRN RO ltWRP RQ ltXRRRS RTRU RVRW RXRY RZR[ R\R] R^R_ R`Ra RbRc RdRe RfRg Rh]XRiRj RkRl /tYRm]5Rn&   ]?! ]Y4      tZRo Rp lt[RqRr/Rs Rt llt\Ru Rv lt]Rw Rx lt^Ry Rz lt_R{RR|R/R} R~ llt`R R€ ltaR� R‚ ltbR–Rƒ R„ lltcR… R† ltdR‡ Rˆ lteR‰ RŠ ltfR‹RI/RŒ R� lltgRŽ R� lthR‹RIR�R/R‘ R’ llti]PÔ                  P×                  ]+][4       R“ R” ltlR# )—z?Direct NeMo Relay integration for Hermes shared client metrics.)ÚannotationsN)ÚOrderedDictÚdeque)Ú	dataclassÚfield)Úmonotonic_ns)ÚAnyÚCallable)Úrelay_runtime©Úget_conversation_context)Úget_version_info©ÚSharedMetricsStore)Úshared_metrics_contract)Úshared_metrics_connectors)Úshared_metrics_efficiency)Úshared_metrics_engagement)Úshared_metrics_fields)Úshared_metrics_model)ÚMODEL_CALL_SCOPEÚSUBSCRIBER_NAMEÚ
TASK_SCOPE)ÚSharedMetricsSubscriberzdict[str, _Runtime | object]Ú	_RUNTIMESÚfailedTÚturn_exit_reasonÚsystem_abortedc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úeventúdict[str, Any]ÚkeyÚstrÚreturn© )Úformats   "ÚR/home/ubuntu/.hermes/hermes-agent/hermes_cli/observability/relay_shared_metrics.pyÚ__annotate__r(   )   s!   € ÷ %ñ %�ð % cð %¨cñ %ó    c                óJ   € \        V P                  V4      ;'       g    R 4      # )Ú )r#   Úget)r    r"   s   &&r'   Ú_textr-   )   s   € Üˆu�y‰y˜‹~×#Ð# Ó$Ð$r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r    r!   r"   r#   r$   útuple[str, str] | Noner%   )r&   s   "r'   r(   r(   -   s'   € ÷ Añ A˜ð A¨cð AÐ6Lñ Ar)   c                óX   € \        V R4      \        W4      r2V'       d   V'       d   W#3# R# )z1(session_id, event[key]) when both are non-empty.Ú
session_idN©r-   )r    r"   r1   Úvalues   &&  r'   Ú_session_pairr4   -   s'   € ä˜e \Ó2´E¸%Ó4E�ß",·ˆJÐÐ@¸DÐ@r)   c               ó    € V ^8„  d   QhRRRR/# )r   r    r!   r$   Úintr%   )r&   s   "r'   r(   r(   3   s   € ÷ `ñ `˜.ð `¨Sñ `r)   c                ó’   € V P                  R4      p\        V\        4      '       d    \        V\        4      '       g
   V^ 8”  d   V# ^ # )zBHermes's provider-local retry ordinal; 0 when absent or malformed.Úretry_count)r,   Ú
isinstancer6   Úbool)r    r3   s   & r'   Ú_retry_ordinalr;   3   s;   € à�I‰I�mÓ$€EÜ˜u¤c×*Ò*´:¸eÄT×3JÒ3JÈuÐWXÌyˆ5Ð_Ð^_Ð_r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úindexzdict[Any, _MetricsSession]r"   r   ÚownerÚ_MetricsSessionr$   ÚNoner%   )r&   s   "r'   r(   r(   9   s*   € ÷ ñ Ð-ð °Cð Àð ÐTXñ r)   c                óX   € V P                  V4      VJ d   V P                  VR4       R# R# )zDDrop ``key`` from ``index`` only while it still points at ``owner``.N)r,   Úpop)r=   r"   r>   s   &&&r'   Ú_forgetrC   9   s%   € à‡y�y�ƒ~˜ÓØ�	‰	�#�tÖñ r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úsessionr?   Útask_idr#   r$   r   r%   )r&   s   "r'   r(   r(   ?   s!   € ÷ 
(ñ 
( ð 
(¸3ð 
(À3ñ 
(r)   c                ó  € \         P                  ! V P                  4      pVeQ   VP                  P                  V P                  8X  d,   VP                  V8X  d   VP
                  e   VP
                  # V P                  P
                  # )zOThe active turn's handle when it owns this exact task, else the session handle.)r
   Úactive_turnr1   ÚleaserF   ÚhandleÚrelay_session)rE   rF   rH   s   && r'   Ú_task_parent_handlerL   ?   sp   € ä×+Ò+¨G×,>Ñ,>Ó?€KàÒØ×Ñ×(Ñ(¨G×,>Ñ,>Ô>Ø×Ñ 7Ô*Ø×ÑÒ*à×!Ñ!Ð!Ø× Ñ ×'Ñ'Ð'r)   Úa2aÚkanbanc               ó    € V ^8„  d   QhRRRR/# ©r   r    r!   r$   r%   )r&   s   "r'   r(   r(   Q   s   € ÷ bñ b >ð b°nñ br)   c                óš  € V P                  R4      '       gJ   V P                  R4      '       g3   V P                  R4      '       g   \        P                  ! V 4      R8w  d   V # ^ RIHp V! 4       '       g   V # ^ RIHp \        V! RR4      ;'       g    R4      P                  4       P                  4       p/ V CRV\        9   d   R	/C# R
/C# )av  Declare the entrypoint of a finite CLI run (``hermes -z``, ``chat -q`` off a TTY, ``-Q``): the
``HERMES_SINGLE_QUERY_SESSION`` marker those paths set (the same one ``cache_ttl: auto`` and the session
source read). ``background`` for a dispatcher-spawned child, else ``one_shot``; the REPL, other surfaces,
delegated children and an already-declared entrypoint are untouched.Ú
entrypointÚparent_task_idÚparent_session_idÚcli)Úis_single_query_session)Úget_session_envÚHERMES_SESSION_SOURCEr+   Ú
backgroundÚone_shot)r,   ÚcontractÚexecution_surfaceÚagent.oneshot_footprintrV   Úgateway.session_contextrW   r#   ÚstripÚlowerÚ_DISPATCHED_SOURCES)r    rV   rW   Úsources   &   r'   Ú_with_launch_entrypointrc   Q   s¬   € ð
 	�	‰	�,×Ò 5§9¡9Ð-=×#>Ò#>À%Ç)Á)ÐL_×B`ÒB`Ü×)Ò)¨%Ó0°EÔ9ØˆÝ?á"×$Ò$ØˆÝ7ä‘Ð!8¸"Ó=×CÐCÀÓD×JÑJÓL×RÑRÓT€FØaˆeÐa�\°6Ô=PÔ3P <ÑaÐaÐV`ÑaÐar)   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
started_nsr6   r$   r%   )r&   s   "r'   r(   r(   c   s   € ÷ >ñ >˜Cð > Cñ >r)   c                óF   € \        ^ \        4       V ,
          R,          4      # )é    i@B )Úmaxr   )re   s   &r'   Ú_elapsed_msri   c   s   € Üˆq”<“> JÕ.°9Õ<Ó=Ð=r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r?   Útaskú_TaskRun | Noner$   r   r%   )r&   s   "r'   r(   r(   g   s&   € ÷ Mñ M˜?ð M°/ð MÀcñ Mr)   c                óN   € Ve   VP                   # V P                  P                   # ©N)rJ   rK   )rE   rk   s   &&r'   Ú_scope_handlero   g   s"   € ØÒ*ˆ4�;‰;ÐL°×0EÑ0E×0LÑ0LÐLr)   c               ó    € V ^8„  d   QhRRRR/# )r   Úitemsr   r$   r%   )r&   s   "r'   r(   r(   k   s   € ÷ Eñ E�ð E˜ñ Er)   c                óª   € V  Uu/ uF  p\        V4      VbK  	  pp\        V4      ^8X  d#   \        \        VP	                  4       4      4      # R# u upi )zLThe single distinct element of ``items`` (identity-deduplicated), else None.N)ÚidÚlenÚnextÚiterÚvalues)rq   ÚitemÚuniques   &  r'   Ú_solerz   k   sI   € á).Ó/© Œb�‹h˜Šn©€FÐ/Ü*-¨f«+¸Ô*:Œ4”�V—]‘]“_Ó%Ó&ÐDÀÐDùò 0s   …Ac               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	candidateútuple[str, str, str]Úobservedr$   r:   r%   )r&   s   "r'   r(   r(   q   s$   € ÷ ñ Ð&:ð ÐFZð Ð_cñ r)   c           	     ó  € V^,          '       d   V ^,          V^,          8w  d   R# \         ;QJ d6    R \        V R,          VR,          RR7       4       F  '       d   K   R# 	  R# ! R \        V R,          VR,          RR7       4       4      # )zBMatch partial hook context without crossing known call boundaries.Fc              3  ój   "  € T F)  w  rV'       * ;'       g    V'       * ;'       g    W8H  x € K+  	  R # 5irn   r%   )Ú.0ÚleftÚrights   &  r'   Ú	<genexpr>Ú)_identities_compatible.<locals>.<genexpr>u   s2   é € ð áH‰KˆDð Œ×.Ð.˜”I×.Ð. ¡Ô.ÛHùs   ‚3—3¦3:Nr   NT)Ústrict)ÚallÚzip)r|   r~   s   &&r'   Ú_identities_compatibler‰   q   sz   € à�A�;Œ;˜) A�,¨(°1­+Ô5Ùß‹3ñ ä˜y¨�}¨h°r­lÀ4ÕHó�3Œ3ð Š3ð ˆ3ñ ä˜y¨�}¨h°r­lÀ4ÕHóó ð r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rE   r?   rF   r#   Úidentityr}   r$   zlist[tuple[str, str, str, str]]r%   )r&   s   "r'   r(   r(   {   s,   € ÷ ñ ØðØ'*ðØ6Jðà$ñr)   c                óš   € V P                    Uu. uF0  pV^ ,          V8X  g   K  \        VR,          V4      '       g   K.  VNK2  	  up# u upi )rg   ºé   NN)Ú
tool_callsr‰   )rE   rF   r‹   r"   s   &&& r'   Ú_compatible_tool_call_keysr�   {   sP   € ð
 ×%Ò%óá%ˆCØˆq�6�WÑô 	ä!7¸¸B½À×!J÷ 	ˆÙ%ñð ùò s   �A¤A¿Ac                  ón   € ] tR t^…t$ R]R&   R]R&   R]R&   RtR]R&   R	tR]R
&   ]! ]R7      t	R]R&   Rt
R# )Ú
_ModelCallr   rJ   r#   rF   údict[str, str]ÚfieldsÚnoneÚerror_classÚunknownÚttft_bucket©Údefault_factoryr6   re   r%   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r–   r˜   r   r   re   Ú__static_attributes__r%   r)   r'   r’   r’   …   s5   ‡ àƒKØƒLØÓØ€K�ÓØ €K�Ó Ù¨LÔ9€J�×9r)   r’   c                  óN   € ] tR t^�t$ R]R&   R]R&   R]R&   R]R&   RtR]R	&   R
tR# )Ú	_ToolCallr   rJ   r#   ÚcategoryÚ	tool_namer6   re   Únot_requiredÚapproval_outcomer%   N)r›   rœ   r�   rž   rŸ   r¦   r    r%   r)   r'   r¢   r¢   �   s!   ‡ àƒKØƒMØƒNØƒOØ*Ð�c×*r)   r¢   c                  ó>  € ] tR t^˜t$ R]R&   R]R&   R]R&   R]R&   R	]R
&   ]! ]R7      tR]R&   ]! ]R7      tR]R&   ]! ]R7      t	R]R&   ]! ]
R7      tR]R&   ]! ]R7      tR]R&   ^ tR]R&   ^ tR]R&   RtR]R&   RtR]R&   ]! ]P$                  R7      tR]R&   RtR# )Ú_TaskRunr#   rF   r   rJ   zcontextvars.ContextÚcontextr6   re   r“   Ústart_fieldsr™   úset[str]Úmodel_call_idszset[tuple[str, str, str]]Útool_call_idsÚturn_idszfrozenset[str]Úretired_turn_idsÚcompleted_tool_call_idsÚunidentified_tool_callsr8   Núdict[str, str] | NoneÚmodel_routeÚselected_routezeff.TurnCostÚcostr%   )r›   rœ   r�   rž   rŸ   r   Úsetr¬   r­   r®   Ú	frozensetr¯   r°   r±   r8   r³   r´   ÚeffÚTurnCostrµ   r    r%   r)   r'   r¨   r¨   ˜   sª   ‡ àƒLØƒKØ Ó ØƒOØ Ó Ù$°SÔ9€N�HÓ9Ù/4ÀSÔ/I€MÐ,ÓIÙ¨sÔ3€HˆhÓ3Ù',¸YÔ'GÐ�nÓGÙ9>ÈsÔ9SÐÐ6ÓSØ#$Ð˜SÓ$Ø€K�ÓØ)-€KÐ&Ó-à,0€NÐ)Ó0Ù¨s¯|©|Ô<€Dˆ,×<r)   r¨   c                  ó*  € ] tR t^¬t$ R]R&   R]R&   ]! ]P                  RR7      tR]R&   Rt	R	]R
&   ]! ]
R7      tR]R&   ]! ]
R7      tR]R&   ]! ]
R7      tR]R&   ]! R R7      tR]R&   RtR]R&   ^ tR]R&   ^ tR]R&   RtR]R&   ^ tR]R&   ^ tR]R&   ]! ]P,                  R7      tR]R &   RtR	]R!&   ]! ]P4                  R7      tR"]R#&   ]! ]P:                  R7      tR$]R%&   ]! ]P@                  R7      t!R&]R'&   ^ t"R]R(&   ^ t#R]R)&   ^ t$R]R*&   R+t%R# ),r?   r#   r1   zrelay_runtime.RelaySessionrK   F)rš   Úreprzthreading.RLockÚlockr:   Úclosingr™   z!dict[tuple[str, str], _ModelCall]Úmodel_callszdict[str, _TaskRun]Útasksz*dict[tuple[str, str, str, str], _ToolCall]r�   c                 	ó   € \        R R7      # )é   )Úmaxlen)r   r%   r)   r'   Ú<lambda>Ú_MetricsSession.<lambda>µ   s	   € ÄÈcÕARr)   z
deque[str]r¯   Nr²   rª   r6   ÚturnsÚfailed_turnsr—   Úlast_outcomeÚfirst_turn_nsÚlast_turn_nsúmodel_.ModelSessionStateÚmodel_stateÚretiringzeff.SessionEfficiencyÚ
efficiencyz!connectors_.ConnectorSessionStateÚ
connectorsúengagement_.RouteRunÚ	route_runÚ	api_callsÚtool_call_totalÚrepliesr%   )&r›   rœ   r�   rž   rŸ   r   Ú	threadingÚRLockr¼   r½   Údictr¾   r¿   r�   r¯   rª   rÅ   rÆ   rÇ   rÈ   rÉ   Úmodel_ÚModelSessionStaterË   rÌ   r¸   ÚSessionEfficiencyrÍ   Úconnectors_ÚConnectorSessionStaterÎ   Úengagement_ÚRouteRunrÐ   rÑ   rÒ   rÓ   r    r%   r)   r'   r?   r?   ¬   s*  ‡ àƒOØ-Ó-Ù!°)·/±/ÈÔN€Dˆ/ÓNØ€GˆTÓÙ5:È4Ô5P€KÐ2ÓPÙ!&°tÔ!<€EÐÓ<Ù=BÐSWÔ=X€JÐ:ÓXÙ#(Ñ9RÔ#SÐ�jÓSà*.€LÐ'Ó.Ø€Eˆ3ƒNØ€L�#ÓØ!€L�#Ó!Ø€M�3ÓØ€L�#ÓÙ,1À&×BZÑBZÔ,[€KÐ)Ó[à€HˆdÓÙ(-¸c×>SÑ>SÔ(T€JÐ%ÓTÙ49È+×JkÑJkÔ4l€JÐ1ÓlÙ&+¸K×<PÑ<PÔ&Q€IÐ#ÓQØ€IˆsÓØ€O�SÓØ€GˆS×r)   r?   c                  ó  € ] tR t^Èt$ Rt]! ]R7      tR]R&   ]! ]	P                  R7      tR]R&   ]! ]P                  R7      tR]R&   ]! ]P                   R7      tR	]R
&   ]! ]P$                  R7      tR]R&   RtR]R&   RtR]R&   RtR# )Ú_PeakLineagez°Open segments of one conversation (compression rotates the session id), their merged peak and
session tally, the conversation's current-model turn run and its spent user turns.r™   r«   ÚopenrÊ   Úpeakúeff.ToolUsageÚtoolszengagement_.SessionTallyÚtallyrÏ   ÚrunNúdeque | NoneÚspentz(connectors_.ConnectorSessionState | NonerÎ   r%   )r›   rœ   r�   rž   Ú__doc__r   r¶   rà   rŸ   r×   rØ   rá   r¸   Ú	ToolUsagerã   rÜ   ÚSessionTallyrä   rÝ   rå   rç   rÎ   r    r%   r)   r'   rß   rß   È   sƒ   ‡ ñZñ ¨3Ô/€Dˆ(Ó/Ù%*¸6×;SÑ;SÔ%T€DÐ
"ÓTÙ °·±Ô?€Eˆ=Ó?Ù&+¸K×<TÑ<TÔ&U€EÐ#ÓUÙ %°k×6JÑ6JÔ K€CÐ	ÓKØ€Eˆ<ÓØ;?€JÐ8×?r)   rß   i   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚintorÊ   Úsegmentr$   r@   r%   )r&   s   "r'   r(   r(   Ú   s)   € ÷ 	{ñ 	{Ð/ð 	{Ð:Rð 	{ÐW[ñ 	{r)   c                óÖ  € VP                   f   R# V P                  ;'       g    VP                  V n        VP                  RJ;'       dR    V P                  RJ ;'       g<    VP                  VP                  ,          V P                  V P                  ,          8„  pV P                   e	   V'       d7   VP                   VP                  VP                  uV n         V n        V n        R# R# )zYMerge one closed segment's context peak (fullest fill wins, a limit hit anywhere sticks).N)Ú
peak_routeÚ	limit_hitÚpeak_windowÚpeak_tokens)rì   rí   Úfullers   && r'   Ú_absorb_peakrô   Ú   sÅ   € à×ÑÒ!ÙØ—^‘^×8Ð8 w×'8Ñ'8€D„NØ× Ñ ¨Ð,÷ ð Ø×Ñ˜DÐ ×sÐs G×$7Ñ$7¸'×:MÑ:MÕ$MÐPT×P`ÑP`Ðcg×csÑcsÕPsÑ$sð ð ‡�Ò§&Ø>E×>PÑ>PÐRY×ReÑReÐgn×gzÑgzÐ;ˆŒ˜Ô)¨4Ö+;ñ #)r)   c                  óü  € ] tR t^ætR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 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! 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/ R0 ltR�R1 R2 lltR3 R4 ltR5 R6 ltR7R8/R9 R: lltR; R< lt R= R> lt!R? R@ lt"RA RB lt#RC RD lt$RER8/RF RG llt%RH RI lt&]'RJ RK l4       t(]'RL RM l4       t)RNR8/RO RP llt*RQ RR lt+RS RT lt,RU RV lt-RW RX lt.RY RZ lt/R[ R\ lt0]'R] R^ l4       t1R_ R` lt2]'Ra Rb l4       t3Rc Rd lt4Re Rf lt5Rg Rh lt6]'Ri Rj l4       t7Rk Rl lt8Rm Rn lt9Ro Rp lt:Rq Rr lt;Rs Rt lt<Ru Rv lt=Rw Rx lt>Ry Rz lt?R{ R| lt@R} R~ ltAR R€ ltBR� R‚ ltCRƒ R„ ltDR… R† ltERžR‡ Rˆ lltFR‰ RŠ ltGR‹ RŒ ltHR� RŽ ltIR� R� ltJR‘ R’ ltKR“ R” ltLR• R– ltM]'R— R˜ l4       tN]OR™ Rš l4       tPR›tQR# )ŸÚ_Runtimez?Own shared-metrics state layered on the Hermes core Relay host.Nc               ó    € V ^8„  d   QhRRRR/# )r   Úhostú!relay_runtime.RelayRuntime | Noner$   r@   r%   )r&   s   "r'   r(   Ú_Runtime.__annotate__é   s   € ÷ %'ñ %'Ð>ð %'È$ñ %'r)   c                	ó�  € T;'       g    \         P                  ! 4       pVf   \        R4      hW n        V P                  P                  V n        RV n        / V n        / V n        / V n        \        P                  ! 4       V n        / V n        / V n        \        P                  ! 4       V n        \!        4       V n        \        P                  ! 4       V n        \        P                  ! 4       V n        \        P                  ! 4       V n        \        P                  ! 4       V n        R V n        \        P                  ! 4       V n        RV n        R V n        R V n        \6         RV P                  P8                   2V n        \=        \?        4       \A        4       PB                  V P                  P8                  R7      V n"        V P                  PF                  PI                  V P:                  V PD                  4       V P                  PK                  V P:                  4       RV n&        \N        PH                  ! V PP                  4       R # )Nz(Hermes core Relay runtime is unavailableTFÚ.)Ú
runtime_id))r
   Úget_runtimeÚRuntimeErrorrø   ÚrelayÚ_activeÚ	_sessionsÚ_task_sessionsÚ_turn_sessionsrÔ   rÕ   Ú_sessions_lockÚ	_lineagesÚ_lineage_ofÚLockÚ_lineage_lockr   Ú_cold_expectedÚ
_cold_lockÚ_task_creation_lockÚ_task_sessions_lockÚ
_send_lockÚ_send_threadÚ_flush_lockÚ_flush_pendingÚ_flush_threadÚ_snapshot_checked_nsr   rý   Ú_subscriber_namer   r   r   Úbase_versionÚ
subscriberÚsubscribersÚregisterÚretain_managed_executionÚ_registeredÚatexitÚshutdown)Úselfrø   Úresolved_hosts   && r'   Ú__init__Ú_Runtime.__init__é   sŸ  € Ø×;Ð;¤× 9Ò 9Ó ;ˆØÒ ÜÐIÓJÐJØ0=Œ	Ø—Y‘Y—_‘_ˆŒ
ØˆŒØ57ˆŒØFHˆÔØFHˆÔÜ'ŸošoÓ/ˆÔð 35ˆŒØ+-ˆÔÜ&Ÿ^š^Ó-ˆÔä6A³mˆÔÜ#Ÿ.š.Ó*ˆŒÜ#,§?¢?Ó#4ˆÔ Ü#,§?¢?Ó#4ˆÔ ä#Ÿ/š/Ó+ˆŒØ59ˆÔô %Ÿ?š?Ó,ˆÔØ#ˆÔØ6:ˆÔØ04ˆÔ!Ü#2Ð"3°1°T·Y±Y×5IÑ5IÐ4JÐ KˆÔÜ1ÜÓ Ô"2Ó"4×"AÑ"AÈdÏiÉi×NbÑNbô
ˆŒð 	�
‰
×Ñ×'Ñ'¨×(=Ñ(=¸t¿¹ÔOØ�	‰	×*Ñ*¨4×+@Ñ+@ÔAØˆÔÜ�Š˜Ÿ™Ö&r)   c               ó    € V ^8„  d   QhRRRR/# ©r   r    r!   r$   ú_MetricsSession | Noner%   )r&   s   "r'   r(   rú     s   € ÷ 8ñ 8 Nð 8Ð7Mñ 8r)   c                	óB  € \        VR 4      pV'       g   R# V P                  ;_uu_ 4        V P                  '       g    RRR4       R# V P                  P	                  V4      pVf    RRR4       R# V P
                  P                  V4      pVf,   \        W#R7      pW@P
                  V&   V P                  V4       RRR4       XP                  ;_uu_ 4        VP                  '       d   RMTuuRRR4       #   + '       g   i     LE; i  + '       g   i     R# ; i)r1   N)r1   rK   )r-   r  r  rø   Úensure_sessionr  r,   r?   Ú_share_spentr¼   r½   )r  r    r1   rK   rE   s   &&   r'   r%  Ú_Runtime.ensure_session  sÑ   € Ü˜5 ,Ó/ˆ
ßÙØ× × Ó Ø—<—<�<Ø÷ !Ñ ð !ŸI™I×4Ñ4°UÓ;ˆMØÒ$Ø÷ !Ñ ð —n‘n×(Ñ(¨Ó4ˆGØŠÜ)°ZÔ]�Ø-4—‘˜zÑ*Ø×!Ñ! 'Ô*÷ !ð �\�\‹\Ø"Ÿ?Ÿ?˜?‘4°÷ Š\÷ !× ú÷ �\ˆ\ús$   «C:Á	 C:Á3A
C:ÃDÃ:D
	ÄD	c               ó    € V ^8„  d   QhRRRR/# ©r   r    r!   r$   r@   r%   )r&   s   "r'   r(   rú   "  s   € ÷ .ñ .¨.ð .¸Tñ .r)   c                óV   € V P                  V4      pVe   V P                  V4       R# R# )zAEmit one payload-free activation attempt under the session scope.N)r%  Ú_emit_client_active©r  r    rE   s   && r'   Úrecord_client_activeÚ_Runtime.record_client_active"  s+   € à×%Ñ% eÓ,ˆØÒØ×$Ñ$ WÖ-ñ r)   c               ó    € V ^8„  d   QhRRRR/# ©r   rE   r?   r$   r@   r%   )r&   s   "r'   r(   rú   (  s   € ÷ Hñ H¨?ð H¸tñ Hr)   c                	ó  € VP                   ;_uu_ 4        VP                  '       g?   V P                  VR \        P                  / 4       V P                  V P                  V4       R R R 4       R #   + '       g   i     R # ; irn   )r¼   r½   Ú_markr[   ÚCLIENT_ACTIVE_MARKÚ_safeÚ_emit_install_snapshot_if_due)r  rE   s   &&r'   r+  Ú_Runtime._emit_client_active(  sL   € Ø�\�\‹\Ø—?—?�?Ø—
‘
˜7 D¬(×*EÑ*EÀrÔJØ—
‘
˜4×=Ñ=¸wÔG÷ �\�\Š\ús   •AA0Á0B	c               ó    € V ^8„  d   QhRRRR/# r0  r%   )r&   s   "r'   r(   rú   .  s   € ÷ 
Jñ 
J°_ð 
JÈñ 
Jr)   c                	óD  € \        4       pV P                  e   W P                  ,
          \        8  d   R # W n        V P                  P                  P                  4       '       g   R # ^RIHp V! \        4       4      pV P                  VR \        P                  V4       R # )N)Úcollect_install_snapshot)r   r  Ú_SNAPSHOT_RECHECK_NSr  ÚstoreÚinstall_snapshot_dueÚshared_metrics_snapshotr9  Ú_raw_configr2  r[   ÚINSTALL_SNAPSHOT_MARK)r  rE   Únowr9  r”   s   &&   r'   r5  Ú&_Runtime._emit_install_snapshot_if_due.  sr   € Ü‹nˆØ×$Ñ$Ò0°S×;TÑ;TÕ5TÔWkÔ5kÙØ$'Ô!Ø�‰×$Ñ$×9Ñ9×;Ò;ÙÝEá)¬+«-Ó8ˆØ�
‰
�7˜D¤(×"@Ñ"@À&ÖIr)   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rE   r?   rk   rl   Únamer#   Údatar“   r$   r@   r%   )r&   s   "r'   r(   rú   :  s4   € ÷ 
ñ 
Ø&ð
Ø.=ð
ØEHð
ØP^ð
à	ñ
r)   c           
     óœ   € V P                  WV P                  P                  P                  V\	        W4      W@P                  4       R7       R# )zLEmit one Relay mark under the task scope when given, else the session scope.)rJ   rD  ÚmetadataN)Ú_run_scopedr   Úscoper    ro   Ú_event_metadata)r  rE   rk   rC  rD  s   &&&&&r'   r2  Ú_Runtime._mark:  sA   € ð 	×ÑØ˜4Ÿ:™:×+Ñ+×1Ñ1°4Ü  Ó/°d×EYÑEYÓE[ð 	ö 	
r)   c               ó    € V ^8„  d   QhRRRR/# )r   r    r!   r$   rl   r%   )r&   s   "r'   r(   rú   C  s   € ÷ 1ñ 1 ð 1°?ñ 1r)   c                óH  € \        VR4      pVf   R# Vw  r4V P                  ;_uu_ 4        V P                  V4      pVe›   VP                  ;_uu_ 4        VP                  '       d    RRR4       RRR4       R# VP
                  P                  V4      pVe,   V P                  WVV4      '       g    RRR4       RRR4       R# VuuRRR4       uuRRR4       # V P                  V4      pVf    RRR4       R# VP                  ;_uu_ 4        \        VR4      pVP                  '       g1   V'       d   W‡P                  9   g   VP                  P                  f    RRR4       RRR4       R# V P                  V4       VP                  P                  P                  4       p	\        P                   ! \#        V4      4      p
V	P%                  V P&                  V P(                  P*                  P,                  \.        V P(                  P0                  P2                  \5        Wt4      V
V P7                  4       R7      p\9        VVV	\;        4       V
\=        VP                  4      R7      pWgP
                  V&   V P>                  ;_uu_ 4        WpP@                  V&   RRR4       V PC                  WvV4       VuuRRR4       uuRRR4       #   + '       g   i     EL; i  + '       g   i     LL; i  + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)z4Open one Relay function scope for a Hermes task run.rF   NÚturn_id)rJ   ÚinputrF  )rF   rJ   r©   re   rª   r¯   )"r4   r  Ú_task_sessionr¼   r½   r¿   r,   Ú_admitsr%  r-   r¯   rK   r©   r+  Úcopyr[   Útask_start_fieldsrc   rå   Ú_with_scope_stackr   rH  Úpushr   Ú	ScopeTypeÚFunctionrL   rI  r¨   r   r·   r  r  Ú_remember_turn)r  r    Útask_keyÚ_rF   r>   rk   rE   rM  Útask_contextrª   rJ   s   &&          r'   Ú
start_taskÚ_Runtime.start_taskC  se  € ä  ¨	Ó2ˆØÒÙØ‰
ˆØ×%×%Ó%Ø×&Ñ& uÓ-ˆEØÒ Ø—Z—Z“ZØ—}—}�}Ø#÷  ÷ &Ñ%ð !Ÿ;™;Ÿ?™?¨7Ó3�DØÒ'°·±¸UÈ%×0PÒ0PØ#÷  ÷ &Ñ%ð  ÷  ‘Z÷ &Ò%ð ×)Ñ)¨%Ó0ˆGØŠØ÷ &Ñ%ð ——“Ü  yÓ1�à—O—O�Oß G×/GÑ/GÔ$GØ×,Ñ,×4Ñ4Ò<à÷ ÷ &Ñ%ð, ×(Ñ(¨Ô1Ø&×4Ñ4×<Ñ<×AÑAÓC�Ü'×9Ò9Ô:QÐRWÓ:XÓY�Ø%×)Ñ)Ø×*Ñ*¨D¯J©J×,<Ñ,<×,AÑ,AÜ §
¡
× 4Ñ 4× =Ñ =Ü.¨wÓ@ÈØ!×1Ñ1Ó3ð	 *ó �ô  Ø#Ø!Ø(Ü+›~Ø!-Ü%.¨w×/GÑ/GÓ%Hô�ð *.—‘˜gÑ&Ø×-×-Ó-Ø4;×'Ñ'¨Ñ1÷ .à×#Ñ# G°5Ô9Ø÷; ‘÷ &Ò%÷  —Z�Zú÷J .×-ú÷5 —ú�÷ &×%×%Ò%úsŠ   «*LÁK	Á)LÁ;8K	Â3LÃK	Ã
LÃLÃ;LÄ&K2	Ä6)K2	ÅLÅ1DK2	ÊKÊK2	Ê6
LËKË	LËK/Ë*K2	Ë2LË=LÌL!	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   v  s   € ÷ 'ñ ' ^ð '¸ñ 'r)   c                óV   € V P                  V4      pVe   RVP                  n        R# R# )zRpre_llm_call: a user message started this task (Hermes-owned forks never fire it).NT)r[  rµ   Ú	user_turn)r  r    rk   s   && r'   Ústart_user_turnÚ_Runtime.start_user_turnv  s'   € à�‰˜uÓ%ˆØÒØ"&ˆD�I‰IÖñ r)   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rk   r¨   ÚcallbackúCallable[..., Any]Úargsr   Úkwargsr$   r%   )r&   s   "r'   r(   rú   |  s;   € ÷ Zñ ZØðZØ(:ðZØCFðZØRUðZà	ñZr)   c                	ót   € VP                   P                  4       P                  ! V P                  V.VO5/ VB # rn   )r©   rQ  rå   rS  )r  rk   rc  re  rf  s   &&&*,r'   Ú_run_in_taskÚ_Runtime._run_in_task|  s5   € ð �|‰|× Ñ Ó"×&Ò& t×'=Ñ'=¸xÐYÈ$ÒYÐRXÑYÐYr)   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   rc  rd  re  r   rf  r$   r%   )r&   s   "r'   r(   rú   �  s+   € ÷ )ñ )Ð*<ð )ÀSð )ÐTWð )Ð\_ñ )r)   c                	óF   € V P                   P                  4        V! V/ VB # rn   )r   Úget_scope_stack)r  rc  re  rf  s   &&*,r'   rS  Ú_Runtime._with_scope_stack�  s"   € Ø�
‰
×"Ñ"Ô$Ù˜Ð( Ñ(Ð(r)   c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   …  s   € ÷ (Vñ (V nð (V¸ñ (Vr)   c                	ó„  € \        VR 4      pV P                  VRRR7      w  r4V'       d   Vf   R# T;'       g    V P                  V4      pVf   R# \        VR4      pV'       g   R# W%3p\        P                  ! V4      pVP
                  ;_uu_ 4        VP                  '       d    RRR4       R# Ve&   V P                  W4VRR7      '       g    RRR4       R# VP                  P                  V4      pVe/   Wxn
        Ve   V;P                  ^,          un         RRR4       R# Vef   Wtn        VP                  ;'       g    TVn        VP                  P                  V4       \!        V4      ^ 8”  d   V;P                  ^,          un        V P#                  W4V P$                  P&                  P(                  \*        V P$                  P-                  / / 4      \/        W44      V P1                  4       \        P2                  R7      p	\5        W’V4      VP                  V&   RRR4       R#   + '       g   i     R# ; i)rF   T©ÚstartÚallow_task_id_fallbackNÚapi_request_id)Úcurrent)rJ   rF  Ú
model_name)r-   Ú
_task_pairr%  r[   Úmodel_call_fieldsr¼   r½   rP  r¾   r,   r”   r8   r³   r´   r¬   Úaddr;   rG  r   ÚllmÚcallr   Ú
LLMRequestro   rI  ÚMODEL_CALL_PROFILE_MODELr’   )
r  r    rF   rE   rk   Ú
request_idÚmodel_call_keyr”   ÚexistingrJ   s
   &&        r'   Ústart_model_callÚ_Runtime.start_model_call…  sÜ  € Ü˜˜yÓ)ˆØŸ™¨°TÐRV˜ÓW‰ˆß�t’|ÙØ×7Ð7˜T×0Ñ0°Ó7ˆØŠ?ÙÜ˜5Ð"2Ó3ˆ
ßÙØ!Ð.ˆÜ×+Ò+¨EÓ2ˆØ�\�\‹\Ø��ˆØ÷ ‰\ð Ò¨¯©°WÀEÐSW¨×(XÒ(XØ÷	 ‰\ð
 ×*Ñ*×.Ñ.¨~Ó>ˆHØÒ#Ø"(”ØÒ#ð ×$Ò$¨Õ)Õ$Ø÷ ‰\ð ÒØ#)Ô Ø&*×&9Ñ&9×&CÐ&C¸V�Ô#Ø×#Ñ#×'Ñ'¨
Ô3Ü! %Ó(¨1Ô,ð ×$Ò$¨Õ)Õ$Ø×%Ñ%Ø˜tŸz™zŸ~™~×2Ñ2Ô4DÀdÇjÁj×F[ÑF[Ð\^Ð`bÓFcÜ$ WÓ3¸d×>RÑ>RÓ>TÜ#×<Ñ<ð &ó ˆFô
 3=¸VÈfÓ2UˆG×Ñ Ñ/÷7 �\�\Š\ús&   ÂH.Â3H.ÃAH.Ä)H.ÅCH.È.H?	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r    r!   Úfinishr:   r$   r@   r%   )r&   s   "r'   r(   rú   ¯  s&   € ÷ "]ñ "] ~ð "]À$ð "]È4ñ "]r)   c          
     óP  € V P                  V4      pVf   R# VP                  ;_uu_ 4        VP                  '       d    RRR4       R# V P                  W14      pV'       d   VP                  P                  V4      MRpVf    RRR4       R# \        P                  ! V4      Vn        V'       Ed�   VP                  P                  VP                  4      pT;P                  VRJ;'       d    VP                  P                  ,          un        VP                  P                  VP                  VP                  R4      VP                  R4      4       V P!                  W3P                  P                  VP                  4      WQ4       \"        P$                  ! V4      Vn        V P'                  W4R4       \"        P(                  ! VP                  R4      3RR/VP                  B pVeQ   V P+                  RV P,                  W3P                  P                  VP                  4      \        P.                  V4       MK\        P0                  ! V4      Vn        VP                  P5                  VP                  VP2                  4       RRR4       R#   + '       g   i     R# ; i)zÈRefresh the located model call's fields from ``event``; ``finish`` closes it.

``api_request_error`` retains the latest attempt error without closing the logical
call; ``post_api_request`` closes it.
NÚusageÚcontext_lengthÚsuccessÚ	call_roleÚprimaryz'Hermes shared-metrics token mark failed)Ú_any_sessionr¼   r½   Ú_existing_model_call_keyr¾   r,   r[   rx  r”   r¿   rF   rÓ   rµ   r_  rË   Úobserve_callÚ_observe_turn_callÚfields_r˜   Ú_finish_model_callÚmodel_token_fieldsÚ_guardedr2  ÚMODEL_TOKENS_MARKÚmodel_error_classr–   Úobserve_error)r  r    r„  rE   r  Ú
model_callrk   Útokenss   &&$     r'   Úupdate_model_callÚ_Runtime.update_model_call¯  s  € ð ×#Ñ# EÓ*ˆØŠ?ÙØ�\�\‹\Ø��ˆØ÷ ‰\ð "×:Ñ:¸7ÓJˆNßDR˜×,Ñ,×0Ñ0°Ô@ÐX\ˆJØÒ!Ø÷ ‰\ô !)× :Ò :¸5Ó AˆJÔßˆvØ—}‘}×(Ñ(¨×);Ñ);Ó<�Ø—’ 4¨tÐ#3×#KÐ#K¸¿	¹	×8KÑ8KÕK•Ø×#Ñ#×0Ñ0°×1BÑ1BÀEÇIÁIÈgÓDVÐX]×XaÑXaÐbrÓXsÔtØ×'Ñ'¨·±×1BÑ1BÀ:×CUÑCUÓ1VÐXbÔjÜ)0×)<Ò)<¸UÓ)C�
Ô&Ø×'Ñ'¨ÀÔKÜ ×3Ò3Ø—I‘I˜gÓ&ñØ2;ðØ?I×?PÑ?Pñ�ð Ò%Ø—M‘MØAÀ4Ç:Á:Ø§¡×!2Ñ!2°:×3EÑ3EÓ!FÌ×HbÑHbÐdjôøô
 *2×)CÒ)CÀEÓ)J�
Ô&Ø×#Ñ#×1Ñ1°*×2CÑ2CÀZ×E[ÑE[Ô\÷3 �\�\Š\ús$   ¬JÁ
;JÂ#JÂ3;JÃ/FJÊJ%	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   Ó  s   € ÷ Hñ H ^ð H¸ñ Hr)   c                ó\  € \        VR4      pV P                  VRRR7      w  r4Ve   Ve   \        VR4      '       g   R# \        P                  ! V4      '       d   R# V P	                  V4      pVP
                  ;_uu_ 4        V P                  W4V4      '       g    RRR4       R# V.VO5pWTP                  9   g   WcP                  9   d    RRR4       R# VP                  P                  V4       V P                  WA4      VP                  V&   RRR4       R#   + '       g   i     R# ; i)z:Open one privacy-safe Relay tool lifecycle under its task.rF   Trq  NÚtool_call_id)r-   rw  rÚ   Úis_connector_batchÚ_tool_call_identityr¼   rP  r°   r�   r­   ry  Ú_open_tool_call)r  r    rF   rE   rk   r‹   r"   s   &&     r'   Ústart_tool_callÚ_Runtime.start_tool_callÓ  sò   € ä˜˜yÓ)ˆØŸ™¨°TÐRV˜ÓW‰ˆØŠ?˜dšl´%¸¸~×2NÒ2NÙÜ×)Ò)¨%×0Ò0ÙØ×+Ñ+¨EÓ2ˆØ�\�\‹\Ø—<‘< ¨u×5Ò5Ø÷ ‰\ð Ð&˜XÑ&ˆCØ×7Ñ7Ô7¸3×BTÑBTÔ;TØ÷ ‰\ð ×Ñ×"Ñ" 8Ô,Ø&*×&:Ñ&:¸4Ó&GˆG×Ñ˜sÑ#÷ �\�\Š\ús   ÂDÂ&'DÃ9DÄD+	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   å  s   € ÷ ñ  ^ð ¸ñ r)   c                ó¬  € V P                  V4      w  r#Ve   Vf   R# \        P                  ! V4      pRpVP                  ;_uu_ 4        VP                  '       g   V P                  W14      '       g    RRR4       R# \        VR4      '       dƒ   V P                  V4      pVP                  P                  VP                  .VO54      pVf9   \        \        W#P                  V4      4      pVe   VP                  V,          MRpVe	   WGn        RpV P                  W#\        P                  RVRV/4       RRR4       R#   + '       g   i     R# ; i)zERecord one bounded approval result without approval text or commands.NÚunattributedrœ  Ú	tool_callÚattributionÚoutcome)Ú_approval_taskr[   Útool_approval_outcomer¼   r½   Ú_event_matches_task_turnr-   rž  r�   r,   rF   rz   r�   r¦   r2  ÚTOOL_APPROVAL_MARK)	r  r    rE   rk   r§  r¦  r‹   r¥  r"   s	   &&       r'   Úrecord_approvalÚ_Runtime.record_approvalå  s  € à×+Ñ+¨EÓ2‰ˆØŠ?˜dšlÙÜ×0Ò0°Ó7ˆØ$ˆØ�\�\‹\Ø��ˆ d×&CÑ&CÀD×&PÒ&PØ÷ ‰\ô �U˜N×+Ò+Ø×3Ñ3°EÓ:�Ø#×.Ñ.×2Ñ2°D·L±LÐ3LÀ8Ñ3LÓM�	ØÒ$ÜÔ :¸7ÇLÁLÐRZÓ [Ó\�CØ;>º? × 2Ñ 2°3Ö 7ÐPT�IØÒ(Ø18Ô.Ø"-�KØ�J‰JØœx×:Ñ:Ø ¨Y¸Ð@ô÷ �\�\Š\ús   Á
+EÁ?B9EÅE	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   ý  s   € ÷ +Pñ +P nð +P¸ñ +Pr)   c           	     óì  a	€ \        VR4      pV P                  VRR7      w  r4Ve   Vf   R# VP                  ;_uu_ 4        V P                  W4V4      '       g    RRR4       R# Rp\        VR4      '       Edq   V P	                  V4      o	V P                  W4S	V4      '       d    RRR4       R# S	VP                  9   d    RRR4       R# S	pVP                  P                  V.VO5R4      pVfÁ   \        ;QJ d)    V	3R lVP                   4       F  '       g   K   RM	  RM! V	3R lVP                   4       4      '       d    RRR4       R# \        W2S	4      p\        V4      ^8”  d    RRR4       R# V'       d3   V^ ,          R,          pVP                  P                  V^ ,          4      pVP                  P                  VS	04       VP                  P                  V4       MV;P                  ^,          un        Vf   V P!                  WA4      pVP"                  P$                  '       dS   VP&                  P(                  P*                  P                  \,        P.                  ! VP1                  R	4      4      4       V P3                  WEV4       VP4                  P7                  V4      pVe"   V P9                  W4\:        P<                  V4       RRR4       R#   + '       g   i     R# ; i)
z7Close and count one unique privacy-safe tool lifecycle.rF   T©rs  Nrœ  c              3  ó<   <"  € T F  p\        VS4      x € K  	  R # 5irn   )r‰   )r�   Ú	completedÚobserved_identitys   & €r'   r„   Ú,_Runtime.record_tool_call.<locals>.<genexpr>  s#   øé € ð á)E˜Iô /¨yÐ:K×LÐLÛ)Eùs   ƒFr�   Útoolset)r-   rw  r¼   rP  rž  Ú_settle_connector_batchr°   r�   rB   Úanyr�   rt   Úupdater­   ry  r±   rŸ  rµ   r_  rÍ   rã   Úusedr¸   Útoolset_metric_namer,   Ú_finish_tool_callrÎ   Úobserver2  r[   ÚCONNECTOR_CHAIN_MARK)
r  r    rF   rE   rk   r¥  r‹   Úmatching_keysÚchainr³  s
   &&       @r'   Úrecord_tool_callÚ_Runtime.record_tool_callý  sg  ø€ ä˜˜yÓ)ˆØŸ™¨Àd˜ÓK‰ˆØŠ?˜dšlÙØ�\�\‹\Ø—<‘< ¨u×5Ò5Ø÷ ‰\ð ˆIÜ�U˜N×+Ó+Ø$(×$<Ñ$<¸UÓ$CÐ!Ø×/Ñ/°Ð?PÐRW×XÒXØ÷ ‰\ð %¨×(DÑ(DÔDØ÷ ‰\ð -�Ø#×.Ñ.×2Ñ2°GÐ3G¸hÑ3GÈÓN�	ØÒ$ß“sô à)-×)EÒ)Eó—s—s’sô à)-×)EÒ)Eó÷ ò ð ÷# ‰\ô$ %?¸wÐQbÓ$c�MÜ˜=Ó)¨AÔ-ð ÷- ‰\÷. %Ø#0°Õ#3°BÕ#7˜Ø$+×$6Ñ$6×$:Ñ$:¸=ÈÕ;KÓ$L˜	Ø×,Ñ,×3Ñ3°XÐ?PÐ4QÔRØ×"Ñ"×&Ñ& xÕ0à×,Ò,°Õ1Õ,ØÒ Ø ×0Ñ0°Ó=�	Ø�y‰y×"×"Ð"Ø×"Ñ"×(Ñ(×-Ñ-×1Ñ1´#×2IÒ2IÈ%Ï)É)ÐT]ÓJ^Ó2_Ô`Ø×"Ñ" 4°EÔ:Ø×&Ñ&×.Ñ.¨uÓ5ˆEØÒ Ø—
‘
˜7¬(×*GÑ*GÈÔO÷K �\�\Š\úsK   ÁK"Á%A K"Â/K"Ã0K"Ã<K"Ä'K"ÅK"ÅK"Å7K"Å?B4K"È4B$K"Ë"K3	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rE   r?   rk   r¨   Úwrapperr}   r    r!   r$   r:   r%   )r&   s   "r'   r(   rú   *  s4   € ÷ ñ Ø&ðØ.6ðØAUðØ^lðà	ñr)   c                óF  € \         P                  ! V4      '       g   R# VP                   Uu. uFE  pV^ ,          VP                  8X  g   K  \         P                  ! VR,          V4      '       g   KC  VNKG  	  ppV'       g*   \         P
                  ! VP                  V4      '       g   R# V FP  pVP                  P                  VR,          4       V P                  W!P                  P                  V4      V4       KR  	  VP                  P                  V4       R# u upi )a  A connector batch wrapper's post is not a call of its own once an entry started: entries
still open (the executor timed out or abandoned the batch) end with the wrapper's outcome.
True when the wrapper was settled this way; a batch refused before any entry counts as itself.Fr�   T)
rÚ   r�  r�   rF   Úis_batch_entryÚbatch_entry_ranr°   ry  r»  rB   )r  rE   rk   rÃ  r    r"   Ústarteds   &&&&&  r'   r¶  Ú _Runtime._settle_connector_batch*  së   € ô ×-Ò-¨e×4Ò4ÙØ")×"4Ò"4ó _Ñ"4˜3Ø˜!•f §¡Ñ,ô Ü1<×1KÒ1KÈCÐPRÍGÐU\×1]÷ �3Ñ"4ˆð _çœ{×:Ò:¸4×;WÑ;WÐY`×aÒaÙÛˆCØ×(Ñ(×,Ñ,¨S°­WÔ5Ø×"Ñ" 4×);Ñ);×)?Ñ)?ÀÓ)DÀeÖLñ ð 	×$Ñ$×(Ñ(¨Ô1Ùùò_s   ­DÁ!DÁ2Dc               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   <  s   € ÷ 8ñ 8¨Nð 8¸tñ 8r)   c                óD  € \        VR4      P                  4       P                  4       R8X  d'   \        P                  \        P
                  ! V4      r2M%\        P                  \        P                  ! V4      r2Vf   R# \        VR4      \        VR4      rTV P                  W'       * R7      w  rgVfS   V'       d	   V'       gA   V P                  V P                  P                  P                  W#V P                  4       R7       R# Vf   R# VP                  ;_uu_ 4        VP                  '       gS   VP                   P#                  VP$                  4      VJ d*   V P'                  Wq4      '       d   V P)                  WgW#4       RRR4       R#   + '       g   i     R# ; i)z;Emit one allowlisted skill fact without its local identity.ÚactionÚloadedNr1   rF   r°  ©rD  rF  )r-   r_   r`   r[   ÚSKILL_LOAD_MARKÚskill_load_fieldsÚSKILL_LIFECYCLE_MARKÚskill_lifecycle_fieldsrw  rS  r   rH  r    rI  r¼   r½   r¿   r,   rF   rª  r2  )r  r    Úmarkr”   r1   rF   rE   rk   s   &&      r'   Úrecord_skill_lifecycleÚ_Runtime.record_skill_lifecycle<  s(  € ä�˜Ó!×'Ñ'Ó)×/Ñ/Ó1°XÔ=Ü#×3Ñ3´X×5OÒ5OÐPUÓ5V‘&ä#×8Ñ8¼(×:YÒ:YÐZ_Ó:`�&ØŠ>Ùä# E¨<Ó8¼%ÀÀyÓ:Q�GØŸ™¨Än˜ÓU‰ˆØŠ?ß§7à×&Ñ&Ø—J‘J×$Ñ$×*Ñ*¨DÈ×H\ÑH\ÓH^ð 'ô ñ ØŠ<ÙØ�\�\‹\à—O—O�OØ—M‘M×%Ñ% d§l¡lÓ3°tÓ;Ø×1Ñ1°$×>Ò>à—
‘
˜7¨$Ô7÷ �\�\Š\ús   ÄA%FÆF	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   X  s   € ÷ Wñ W ð W°Dñ Wr)   c           	     óâ  € V P                  V4      pVf   R# VP                  ;_uu_ 4        VP                  '       * ;'       d    V P                  V\	        VR4      V4      pT;'       d&    VP
                  ;'       d    VP                  '       * pRRR4       X'       d    V P                  RVP                  /4       R# X'       d   V P                  R4       R# R#   + '       g   i     LT; i)z?Close one task scope exactly once with bounded terminal fields.NrF   r1   z'Hermes shared-metrics task flush failed)
r‹  r¼   r½   Ú_finish_taskr-   rÌ   r¿   Úclose_sessionr1   Ú_schedule_flush_and_export)r  r    rE   ÚfinishedÚretireds   &&   r'   Úfinish_taskÚ_Runtime.finish_taskX  sº   € à×#Ñ# EÓ*ˆØŠ?ÙØ�\�\‹\Ø"Ÿ?™?Ô*÷ ð ¨t×/@Ñ/@Øœ˜u iÓ0°%ó0ˆHð ×IÐI 7×#3Ñ#3×IÐI¸G¿M¹MÔ8IˆG÷	 ÷
 Ø×Ñ ¨g×.@Ñ.@ÐAÖBßØ×+Ñ+Ð,UÖVñ ÷ �\ús   ¬?CÁ,CÂ CÃC.	c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   g  s   € ÷ Añ A >ð A°dñ Ar)   c                	ó¾  € V P                  V4      pVf   V P                  \        VR4      4       R # V P                  V/ VC\        CRRRR/C4      '       g   R # V P                  V4       V P                  RVP                   R24       V P                  ;_uu_ 4        \        V P                  VP                  V4       R R R 4       R #   + '       g   i     R # ; i)Nr1   r²  FÚinterruptedzHermes shared-metrics session z flush failed)Ú_sessionÚ_close_unseen_segmentr-   Ú_abort_sessionÚ_ABORTEDÚ_emit_session_summaryrÙ  r1   r  rC   r  r,  s   && r'   rØ  Ú_Runtime.close_sessiong  sÂ   € Ø—-‘- Ó&ˆØŠ?Ø×&Ñ&¤u¨U°LÓ'AÔBÙØ×"Ñ"ØÐT˜ÐT¤ÐT¨;¸¸}ÈeÑT÷
ò 
ñ Ø×"Ñ" 7Ô+Ø×'Ñ'Ø,¨W×-?Ñ-?Ð,@ÀÐNô	
ð × × Ó Ü�D—N‘N G×$6Ñ$6¸Ô@÷ !× × Ò ús   Â"CÃC	c               ó   € V ^8„  d   QhRR/# ©r   r$   r@   r%   )r&   s   "r'   r(   rú   w  s   € ÷ ñ ˜$ñ r)   c                	óJ  € V P                   ;_uu_ 4        R V n        \        V P                  4      pRRR4       X F!  pV P	                  V P
                  RV/4       K#  	  V P                  ;_uu_ 4        \        V P                  4      pRRR4       X F  pV P	                  V P                  V4       K!  	  V P                  '       g   R# V P                  R4       V P                  4        V P                  4        R#   + '       g   i     LÕ; i  + '       g   i     L�; i)FNr1   z+Hermes shared-metrics shutdown flush failed)r  r  Úlistr  r4  rØ  r	  r  râ  r  Ú_flush_and_exportÚ_deregisterÚ_release)r  Úsession_idsr1   Úunseens   &   r'   r  Ú_Runtime.shutdownw  sÑ   € Ø× × Ó Ø ˆDŒLÜ˜tŸ~™~Ó.ˆK÷ !ó &ˆJØ�J‰J�t×)Ñ)¨L¸*Ð+EÖFñ &à××ÓÜ˜$×*Ñ*Ó+ˆF÷  ã ˆJØ�J‰J�t×1Ñ1°:Ö>ñ !à××ÐÙØ×ÑÐLÔMØ×ÑÔØ�‰Ž÷ !× ú÷
  ×ús   •C?Á5DÃ?D	ÄD"	c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   rú   ‡  s   € ÷ !ñ !˜Tñ !r)   c                	óÒ   € V P                  V P                  P                  P                  V P                  4       V P
                  P                  V P                  4       R V n        R# ©FN)r4  r   r  Ú
deregisterr  rø   Úrelease_managed_executionr  ©r  s   &r'   rì  Ú_Runtime._deregister‡  sF   € Ø�
‰
�4—:‘:×)Ñ)×4Ñ4°d×6KÑ6KÔLØ�	‰	×+Ñ+¨D×,AÑ,AÔBØ ˆÖr)   c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   rú   Œ  s   € ÷ ñ ˜Dñ r)   c                ó4  € V P                   ;_uu_ 4        RV n        RRR4       V P                  P                  4        V P                  '       d   V P                  4        V P                   ;_uu_ 4        \        V P                  P                  4       4      pRRR4       X F'  pV P                  VRVP                  /\        C4       K)  	  V P                   ;_uu_ 4        V P                  P                  4        RRR4       V P                  ;_uu_ 4        V P                  P                  4        V P                  P                  4        RRR4       V P                   ;_uu_ 4        V P"                  P                  4        V P$                  P                  4        RRR4       V P'                  4        R#   + '       g   i     EL¥; i  + '       g   i     EL=; i  + '       g   i     Lì; i  + '       g   i     L®; i  + '       g   i     Lp; i)z=Stop collection without exporting locally aggregated metrics.FNr1   )r  r  r  Ú
deactivater  rì  rê  r  rw   rã  r1   rä  Úclearr  r  r  r	  r  r  rí  )r  ÚsessionsrE   s   &  r'   rú  Ú_Runtime.deactivateŒ  s[  € à× × Ó Ø ˆDŒL÷ !à�‰×"Ñ"Ô$Ø××ÐØ×ÑÔØ× × Ó Ü˜DŸN™N×1Ñ1Ó3Ó4ˆH÷ !ãˆGØ×Ñ ¨,¸×8JÑ8JÐ)WÌhÐ)WÖXñ  à× × Ó Ø�N‰N× Ñ Ô"÷ !à×%×%Ó%Ø×Ñ×%Ñ%Ô'Ø×Ñ×%Ñ%Ô'÷ &ð ××ÓØ�N‰N× Ñ Ô"Ø×Ñ×"Ñ"Ô$÷  ð 	�‰Ž÷# !× Ð ú÷
 !× Ð ú÷ !× úç%×%ú÷  ×ús;   •F9Á5$GÃ"G!Ä5G4Å*5HÆ9G
	ÇG	Ç!G1	Ç4H	ÈH	c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   rú   ¡  s   € ÷ -ñ -˜$ñ -r)   c                óä   € V P                  4        \        P                  ! \        4      ;_uu_ 4        \        P
                  ! V P                  4       RRR4       R#   + '       g   i     R# ; i)uÑ   Let an in-flight send finish briefly, then drop the atexit hook.

A short-lived CLI process would otherwise exit and kill the daemon send thread
mid-request â€” the common case for this feature's one cadence.
N)Ú_join_send_threadÚ
contextlibÚsuppressÚ	Exceptionr  Ú
unregisterr  rö  s   &r'   rí  Ú_Runtime._release¡  sB   € ð 	×ÑÔ Ü× Ò ¤×+Õ+Ü×Ò˜dŸm™mÔ,÷ ,×+×+Ò+ús   ³!AÁA/	c               ó    € V ^8„  d   QhRRRR/# )r   ÚtimeoutÚfloatr$   r@   r%   )r&   s   "r'   r(   rú   «  s   € ÷ 	Vñ 	V¨ð 	V¸ñ 	Vr)   c                ó0  € V P                   ;_uu_ 4        V P                  pRRR4       Xe-   VP                  4       '       d    VP                  V4       R# R# R#   + '       g   i     LB; i  \         d    \
        P                  RRR7        R# i ; i)z£Bounded on purpose: pending packages stay in SQLite and go out next run, so
blocking on a slow network is the wrong trade; the daemon thread dies with the process.Nz&Shared-metrics send thread join failedT©Úexc_info)r  r  Úis_aliveÚjoinr  ÚloggerÚdebug)r  r  Úthreads   && r'   r   Ú_Runtime._join_send_thread«  su   € ð �_�_‹_Ø×&Ñ&ˆF÷ àÒ &§/¡/×"3Ò"3ðVØ—‘˜GÖ$ñ #4Ñ÷ �_ûô
 ô VÜ—‘ÐEÐPT�×UðVús   •AÁA/ ÁA,	Á/"BÂBc               ó    € V ^8„  d   QhRRRR/# r"  r%   )r&   s   "r'   r(   rú   ¶  s   € ÷ Bñ B˜nð BÐ1Gñ Br)   c                	ó²   € V P                   ;_uu_ 4        V P                  P                  \        VR 4      4      uuRRR4       #   + '       g   i     R# ; i)r1   N)r  r  r,   r-   ©r  r    s   &&r'   rá  Ú_Runtime._session¶  s6   € Ø× × Ó Ø—>‘>×%Ñ%¤e¨E°<Ó&@ÓA÷ !× × Ó ús   •%AÁA	c               ó    € V ^8„  d   QhRRRR/# r"  r%   )r&   s   "r'   r(   rú   º  s   € ÷ ^ñ ^ .ð ^Ð5Kñ ^r)   c                óZ   € V P                  VRR7      ;'       g    V P                  V4      # )z;Owner session by task/turn correlation, else by session_id.Tr°  )rO  rá  r  s   &&r'   r‹  Ú_Runtime._any_sessionº  s*   € à×!Ñ! %ÀÐ!ÓE×]Ð]ÈÏÉÐW\ÓI]Ð]r)   rr  Fc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r    r!   rr  r:   Úlookupr   r$   ú.tuple[_MetricsSession | None, _TaskRun | None]r%   )r&   s   "r'   r(   rú   ¾  s,   € ÷ 	ñ 	Ø#ð	Ø/3ð	ØGJð	à	7ñ	r)   c               óì   € V P                   ! V3/ VB pVe&   VP                  P                  \        VR4      4      MRpVf1   V'       d)   V P	                  V4      pVe   V P                  V4      MRpWE3# )zOResolve (session, task) for a task-scoped hook; ``start`` opens a missing task.NrF   )rO  r¿   r,   r-   r[  )r  r    rr  r  rE   rk   s   &&$,  r'   rw  Ú_Runtime._task_pair¾  sp   € ð ×$Ò$ UÑ5¨fÑ5ˆØ=DÒ=Pˆw�}‰}× Ñ ¤ u¨iÓ!8Ô9ÐVZˆØŠ<ŸEØ—?‘? 5Ó)ˆDØ37Ò3C�d×(Ñ(¨Ô/ÈˆGØˆ}Ðr)   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r   rE   r?   rk   rl   rc  rd  re  r   rf  r$   r%   )r&   s   "r'   r(   rú   É  sF   € ÷ Zñ ZØ&ðZØ.=ðZØI[ðZàðZà!ðZð 
ñZr)   c                óŒ   € Ve   V P                   ! W#.VO5/ VB # V P                  P                  ! VP                  V.VO5/ VB # )zMRun under the task context when the call belongs to a task, else the session.)rh  rø   Úrun_in_sessionrK   )r  rE   rk   rc  re  rf  s   &&&&*,r'   rG  Ú_Runtime._run_scopedÉ  sM   € ð
 ÒØ×$Ò$ TÐE°dÒE¸fÑEÐEØ�y‰y×'Ò'¨×(=Ñ(=¸xÐYÈ$ÒYÐRXÑYÐYr)   c               ó    € V ^8„  d   QhRRRR/# ©r   Úfailure_messager#   r$   r@   r%   )r&   s   "r'   r(   rú   Ò  s   € ÷ (ñ (¸#ð (À$ñ (r)   c                ó  € ^ RI Hp V P                  ;_uu_ 4        RV n        V P                  e    RRR4       R# V! V P
                  RV3R7      pVP                  4        W0n        RRR4       R#   + '       g   i     R# ; i)aV  Schedule the process-wide Relay flush without blocking the finishing turn.

``flush()`` also waits for every managed tool/LLM call in flight in ANY session, so on a
turn thread one session finishing stalls behind another session's long tool. One worker
per runtime (= per profile); triggers landing while it runs coalesce into one more pass.
)Úspawn_context_threadTNzhermes-shared-metrics-flush)rC  re  )Úagent.memory_providerr&  r  r  r  Ú_run_flush_workerrr  )r  r$  r&  r  s   &&  r'   rÙ  Ú#_Runtime._schedule_flush_and_exportÒ  sp   € õ 	?à××ÓØ"&ˆDÔØ×!Ñ!Ò-Ø÷ Ññ
 *Ø×&Ñ&Ð-JÐRaÐQcôˆFð �L‰LŒNØ!'Ô÷ ××Òús   ›A2¼,A2Á2B	c               ó    € V ^8„  d   QhRRRR/# r#  r%   )r&   s   "r'   r(   rú   ç  s   € ÷ 	4ñ 	4°ð 	4¸ñ 	4r)   c                	óà   €  V P                   ;_uu_ 4        V P                  '       g   RV n         RRR4       R# RV n        RRR4       V P                  V4       K\    + '       g   i     L#; i)TNF)r  r  r  rë  ©r  r$  s   &&r'   r(  Ú_Runtime._run_flush_workerç  sZ   € ØØ×!×!Ó!Ø×*×*Ð*ð *.�DÔ&Ø÷ "Ñ!ð ',�Ô#÷ "ð ×"Ñ" ?Ö3÷ "×!ús   –A»AÁA-	c               ó    € V ^8„  d   QhRRRR/# r#  r%   )r&   s   "r'   r(   rú   ò  s   € ÷ ñ °ð ¸ñ r)   c                óÂ   €  V P                   P                  P                  4        V P                  4        R#   \         d    \
        P                  TRR7        R# i ; i)zIFlush the Relay subscriber, then export; a failed flush skips the export.Tr
  N)r   r  ÚflushÚ_exportr  r  Úwarningr,  s   &&r'   rë  Ú_Runtime._flush_and_exportò  sI   € ð	Ø�J‰J×"Ñ"×(Ñ(Ô*ð �L‰LŽNøô ô 	;Ü�N‰N˜?°TˆN×:ð	;ús   ‚$8 ¸"AÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r?   Ú
base_eventr!   r$   r:   r%   )r&   s   "r'   r(   rú   û  s"   € ÷ 	ñ 	 oð 	À>ð 	ÐVZñ 	r)   c           
     ó:  € VP                   ;_uu_ 4        VP                  '       d    RRR4       R# RVn        \        VP                  4       F  pV P	                  W/ VCRV/C4       K  	  V P                  W4       RRR4       R#   + '       g   i     R# ; i)zSMark the session closing and system-abort its open tasks; False if already closing.NFTrF   )r¼   r½   rê  r¿   r×  Ú_end_pending_model_calls)r  rE   r5  rF   s   &&& r'   rã  Ú_Runtime._abort_sessionû  s|   € à�\�\‹\Ø��ˆØ÷ ‰\ð #ˆGŒOÜ §¡Ö.�Ø×!Ñ! 'Ð4V°zÐ4VÀ9ÈgÑ4VÖWñ /à×)Ñ)¨'Ô>÷ ñ ÷ Ž\ñ ús   •B	³AB	Â	B	rs  c               ó$   € V ^8„  d   QhRRRRRR/# )r   r    r!   rs  r:   r$   r#  r%   )r&   s   "r'   r(   rú     s$   € ÷ ñ Ø#ðØ@Dðà	ñr)   c               óÖ  a€ \        VR4      \        VR4      upoS'       g   R# V P                  ;_uu_ 4        V P                  P                  \	        VR4      4      pVf&   V'       d   V P
                  P                  VS34      pVf	   V'       g   VuuRRR4       # \        V3R lV P
                  P                  4        4       4      uuRRR4       #   + '       g   i     R# ; i)zLOwner session by (session, turn), then (session, task), then unique task_id.r1   rF   NrM  c              3  óB   <"  € T F  w  w  rq2S8X  g   K  Vx € K  	  R # 5irn   r%   )r�   rY  ÚtidrE   rF   s   &   €r'   r„   Ú)_Runtime._task_session.<locals>.<genexpr>  s$   øé € ð Ù1LÑ-™H˜Q gÐW^ÑP^—’Ó1Lùs   ƒ•
)r-   r  r  r,   r4   r  rz   rq   )r  r    rs  r1   r>   rF   s   &&$  @r'   rO  Ú_Runtime._task_session  s¹   ø€ ô $ E¨<Ó8¼%ÀÀyÓ:QÐˆ
�GßÙØ×%×%Ó%Ø×'Ñ'×+Ñ+¬M¸%ÀÓ,KÓLˆEØŠ}§Ø×+Ñ+×/Ñ/°¸WÐ0EÓF�ØÒ ×(>Ø÷ &Ò%ô ô Ø15×1DÑ1D×1JÑ1JÔ1Lóó ÷ &×%×%Ó%ús   ¹1CÁ+(CÂCÂ ,CÃC(	c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r   rE   r?   rk   r¨   r    r!   r$   r@   r%   )r&   s   "r'   r(   rú     s2   € ÷ Mñ MØ&ðMØ.6ðMØ?MðMà	ñMr)   c                	óþ   € \        VR 4      pV'       dU   VP                  P                  V4       V P                  ;_uu_ 4        WP                  VP
                  V3&   RRR4       R# R#   + '       g   i     R# ; i)rM  N)r-   r®   ry  r  r  r1   )r  rE   rk   r    rM  s   &&&& r'   rW  Ú_Runtime._remember_turn  sa   € ô ˜˜yÓ)ˆßØ�M‰M×Ñ˜gÔ&Ø×)×)Ó)ØEL×#Ñ# W×%7Ñ%7¸Ð$AÑB÷ *Ñ)ñ ç)×)Ð)ús   ÁA+Á+A<	c               ó    € V ^8„  d   QhRRRR/# )r   r    r!   r$   r}   r%   )r&   s   "r'   r(   rú   !  s   € ÷ eñ e >ð eÐ6Jñ er)   c                óH   € \        V R4      \        V R4      \        V R4      3# )z@Identify one provider-local tool call without exporting its IDs.rt  rM  rœ  r2   )r    s   &r'   rž  Ú_Runtime._tool_call_identity   s(   € ô �UÐ,Ó-¬u°U¸IÓ/FÌÈeÐUcÓHdÐdÐdr)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rk   r¨   r    r!   r$   r:   r%   )r&   s   "r'   r(   rú   &  s!   € ÷ 
ñ 
 xð 
¸ð 
È4ñ 
r)   c                ó¨   € \        VR4      pV'       g   R# W P                  9  ;'       d(    V P                  '       * ;'       g    W P                  9   # )z>Reject delayed hooks from a prior run that reused the task ID.rM  T)r-   r¯   r®   )rk   r    rM  s   && r'   rª  Ú!_Runtime._event_matches_task_turn%  sJ   € ô ˜˜yÓ)ˆßÙØ×3Ñ3Ñ3÷ 
ð 
Ø—‘Ô×9Ð9 ¯M©MÑ!9ð	
r)   ru  c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r   rE   r?   rk   r¨   r    r!   ru  r:   r$   r%   )r&   s   "r'   r(   rú   /  s<   € ÷ ñ à ðð ðð ð	ð ðð 
ñr)   c               óâ   € VP                   '       gI   V P                  W#4      '       d2   V'       d,   VP                  P                  VP                  4      VJd   R# V P                  WV4       R# )zõWhether ``event`` may act on ``task`` (caller holds ``session.lock``).

Rejects closing sessions and stale turns; with ``current`` also requires ``task`` to
still be the session's live run for its ID. Admitted events have their turn remembered.
FT)r½   rª  r¿   r,   rF   rW  )r  rE   rk   r    ru  s   &&&&$r'   rP  Ú_Runtime._admits/  sQ   € ð �O�OˆOØ×0Ñ0°×=Ò=ß˜GŸM™M×-Ñ-¨d¯l©lÓ;À4ÓGáØ×Ñ˜G¨5Ô1Ùr)   c               ó    € V ^8„  d   QhRRRR/# )r   r    r!   r$   r  r%   )r&   s   "r'   r(   rú   E  s    € ÷ Añ AØ#ðAà	7ñAr)   c                óL  a a€ \         P                  ! 4       pVeA   S P                  / VCRVP                  P                  RVP
                  /C4      w  r4Ve   W43# S P                  V4      w  r4Ve   W43# \        VR4      oRpS'       dL   S P                  ;_uu_ 4        \        V V3R lS P                  P                  4        4       4      pRRR4       Vf   R# \        V3R lVP                  P                  4        4       4      pVf   R# W43#   + '       g   i     LL; i)zEResolve approval correlation without guessing across ambiguous turns.Nr1   rF   rM  c              3  ó†   <"  € T F6  w  w  rpVS8X  g   K  SP                   P                  V4      VJ g   K2  Vx € K8  	  R # 5irn   )r  r,   )r�   Úowner_idÚcandidate_turn_idr|   r  rM  s   &   €€r'   r„   Ú*_Runtime._approval_task.<locals>.<genexpr>Y  sG   øé € ð  áD_Ñ@Ñ5˜°yØ(¨GÑ3ô à8<¿¹×8JÑ8JÈ8Ó8TÐXaÐ8a÷ ’IÛD_ùs   ƒA–A·
Ac              3  óN   <"  € T F  pSVP                   9   g   K  Vx € K  	  R # 5irn   )r®   )r�   rk   rM  s   & €r'   r„   rQ  `  s    øé € ÐYÑ&<˜dÀÈ4Ï=É=Ñ@X—T’TÓ&<ùs   ƒ%›
%)NN)r
   rH   rw  rI   r1   rF   r-   r  rz   r  rq   r¿   rw   )r  r    ÚactiverE   rk   rM  s   f&   @r'   r¨  Ú_Runtime._approval_taskE  s  ù€ ô ×*Ò*Ó,ˆØÒØ ŸO™OØ[�5Ð[˜,¨¯©×(?Ñ(?ÀÈFÏNÉNÑ[ó‰MˆGð ÒØ�}Ð$àŸ™¨Ó.‰ˆØÒØ�=Ð ä˜˜yÓ)ˆØˆßØ×)×)Ó)Üõ  àDH×DWÑDW×D]ÑD]ÔD_ó ó �÷ *ð Š?ØÐÜÔY g§m¡m×&:Ñ&:Ô&<ÓYÓYˆØ#š|ˆ|Ð@°'°Ð@÷ *×)ús   Â /DÄD#	c               ó$   € V ^8„  d   QhRRRRRR/# )r   rk   r¨   r    r!   r$   r¢   r%   )r&   s   "r'   r(   rú   c  s!   € ÷ 
ñ 
 Hð 
°^ð 
È	ñ 
r)   c           	     	ó2  € V P                  WP                  P                  P                  \        P
                  / VP                  V P                  4       R 7      p\        V\        P                  ! V4      \        P                  ! V4      \        4       4      # ))rJ   rF  )rh  r   rã   r{  r[   ÚTOOL_CALL_SCOPErJ   rI  r¢   Útool_categoryÚtool_metric_namer   )r  rk   r    rJ   s   &&& r'   rŸ  Ú_Runtime._open_tool_callc  sx   € Ø×"Ñ"Ø—*‘*×"Ñ"×'Ñ'¬×)AÑ)AÀ2Ø—;‘;¨×)=Ñ)=Ó)?ð #ó 
ˆô Ø”H×*Ò*¨5Ó1´8×3LÒ3LÈUÓ3SÔUaÓUcó
ð 	
r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rk   r¨   r¥  r¢   r    r!   r$   r@   r%   )r&   s   "r'   r(   rú   l  s,   € ÷ 
ñ 
Øð
Ø)2ð
Ø;Ið
à	ñ
r)   c                	óØ   a aaa€ \         P                  ! VSP                  SP                  \	        SP
                  4      SP                  R 7      oS P                  RVV VV3R l4       R# ))r£   r¦   Úfallback_duration_msr¤   z,Hermes shared-metrics tool call close failedc                 óÎ   <€ SP                  SSP                  P                  P                  SP                  SP                  P                  S 4      SP                  4       R 7      # )©rF  )rh  r   rã   Úcall_endrJ   ÚToolExecutionResultrI  )r”   r  rk   r¥  s   €€€€r'   rÃ   Ú,_Runtime._finish_tool_call.<locals>.<lambda>u  sP   ø€ �D×%Ñ%Ø�d—j‘j×&Ñ&×/Ñ/°×1AÑ1AØ—
‘
×.Ñ.¨vÓ6Ø×-Ñ-Ó/ð &ô r)   N)r[   Útool_terminal_fieldsr£   r¦   ri   re   r¤   r’  )r  rk   r¥  r    r”   s   fff&@r'   r»  Ú_Runtime._finish_tool_calll  sT   û€ ô ×.Ò.Ø˜I×.Ñ.À×A[ÑA[Ü!,¨Y×-AÑ-AÓ!BÈi×NaÑNaô
ˆð 	�‰Ø:÷ö	
r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# r@  r%   )r&   s   "r'   r(   rú   |  s2   € ÷ cñ cØ&ðcØ.6ðcØ?Mðcà	ñcr)   c                	óJ  € \         P                  ! V4      w  p pR R RR/P                  VR4      pVP                   Uu. uF  qw^ ,          VP                  8X  g   K  VNK   	  up F4  pV P                  W!P                  P                  V4      / VCRV/C4       K6  	  R# u upi )Ú	cancelledÚ	timed_outr  ÚerrorÚstatusN)r[   Útask_terminal_stater,   r�   rF   r»  rB   )r  rE   rk   r    Útask_outcomerY  rj  r"   s   &&&&    r'   Ú_end_pending_tool_callsÚ _Runtime._end_pending_tool_calls|  s›   € ô &×9Ò9¸%Ó@Ñˆ�a˜Ø˜{¨K¸ÐC×GÑGÈÐV]Ó^ˆØ#*×#5Ò#5ÓPÑ#5˜C¸Q½À4Ç<Á<Ñ9O—C�CÑ#5ÔPˆCØ×"Ñ" 4×);Ñ);×)?Ñ)?ÀÓ)DÐFaÈÐFaÐPXÐZ`ÑFaÖbó QùÒPs   ¿B ÁB c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rE   r?   r  ztuple[str, str]r§  r#   r$   r@   r%   )r&   s   "r'   r(   rú   „  s,   € ÷ 
ñ 
Ø&ð
Ø8Gð
ØRUð
à	ñ
r)   c                	óÔ  € VP                   P                  VR 4      pVf   R # VP                  pVR8X  d
   VR8X  d   Rp\        P                  ! VP
                  RW5VP                  R7      pV P                  RV P                  WP                  P                  VP                  4      V P                  P                  P                  VP                  VV P!                  4       R7       R # )Nr   r•   r—   rŠ  )r‰  r§  r–   r˜   z-Hermes shared-metrics model call close failedr_  )r¾   rB   r–   r[   Úmodel_route_fieldsr”   r˜   r’  rG  r¿   r,   rF   r   rz  r`  rJ   rI  )r  rE   r  r§  r–  r–   r”   s   &&&&   r'   r�  Ú_Runtime._finish_model_call„  sÇ   € ð ×(Ñ(×,Ñ,¨^¸TÓBˆ
ØÒÙØ ×,Ñ,ˆØ�hÔ ;°&Ô#8Ø#ˆKÜ×,Ò,Ø×Ñ¨¸GØ"×.Ñ.ô
ˆð 	�‰Ø;Ø×Ñ˜g§}¡}×'8Ñ'8¸×9KÑ9KÓ'LØ�J‰J�N‰N×#Ñ# Z×%6Ñ%6¸Ø×)Ñ)Ó+ð	 	ö 	
r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r?   r    r!   r$   r@   r%   )r&   s   "r'   r(   rú   ˜  s'   € ÷ Zñ Z°ð ZÈð ZÐ[_ñ Zr)   c                óD  € \        VR4      p\        P                  ! V4      ^ ,          R8H  pVP                  P	                  4        UUu. uF"  w  rVV'       d   VP
                  V8X  g   K   VNK$  	  pppV F  pT P                  YV'       d   RMR4       K!  	  R# u uppi )zHClose calls that never saw a successful response as failed or cancelled.rF   rg  r   N)r-   r[   rk  r¾   rq   rF   r�  )	r  rE   r    rF   rg  ÚkÚcÚpendingr"   s	   &&&      r'   r7  Ú!_Runtime._end_pending_model_calls˜  s„   € ä˜˜yÓ)ˆÜ×0Ò0°Ó7¸Õ:¸kÑIˆ	Ø!(×!4Ñ!4×!:Ñ!:Ô!<ÔdÑ!<™˜ÇGÈqÏyÉyÐ\cÑOc—1�1Ñ!<ˆÑdÛˆCØ×#Ñ# GÇ±+ÐPXÖYó ùó es   Á
BÁ,Bc               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r?   r    r!   r$   r/   r%   )r&   s   "r'   r(   rú   ¡  s$   € ÷ ?ñ ?Ø ð?Ø)7ð?à	ñ?r)   c                óD  € \        VR4      pV'       g   R# \        VR4      V3pW0P                  9   g   V^ ,          '       d   W0P                  9   d   V# R# V P                   Uu. uF  qD^,          V8X  g   K  VNK  	  pp\        V4      ^8X  d
   V^ ,          # R# u upi )zT(task_id, request_id) of an open call; a task-less event may match by request alone.rt  NrF   )r-   r¾   rt   )rE   r    r~  r"   r|   Ú
candidatess   &&    r'   rŒ  Ú!_Runtime._existing_model_call_key   s›   € ô
 ˜5Ð"2Ó3ˆ
ßÙÜ�U˜IÓ&¨
Ð3ˆØ×%Ñ%Ô%¨¨Q¯¬Ø×!4Ñ!4Ô4�3Ð>¸$Ð>Ø18×1DÒ1DÓcÑ1D IÐRSÍÐXbÑHb—i�iÑ1Dˆ
ÐcÜ # J£°1Ô 4ˆz˜!�}Ð>¸$Ð>ùò ds   Á&BÁ:Bc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rE   r?   rF   r#   r    r!   r$   r:   r%   )r&   s   "r'   r(   rú   ®  s)   € ÷  ñ   Oð  ¸cð  È.ð  Ð]añ  r)   c                	óZ  € VP                   P                  V4      pVf   R# V P                  WV4       V P                  V/ VCRV/C4       \        P
                  ! / VP                  CVC\        VP                  4      \        VP                  4      \        VP                  4      VP                  ,           VP                  R7      pVP                  P                  '       d   V P!                  WVR,          4       VP"                  '       g   V P%                  WV4        V P'                  RV P(                  V\*        P,                  V P.                  VP0                  WPP3                  4       R7      pVRJ d   \4        P7                  RV4       VP                   P9                  VR 4       VP:                  P=                  VP>                  4       V P@                  ;_uu_ 4        \C        V PD                  VPF                  V3V4       VP>                   F&  p\C        V PH                  VPF                  V3V4       K(  	  R R R 4       R#   + '       g   i     R# ; i  TP                   P9                  TR 4       TP:                  P=                  TP>                  4       T P@                  ;_uu_ 4        \C        T PD                  TPF                  T3T4       TP>                   F&  p\C        T PH                  TPF                  T3T4       K(  	  R R R 4       i   + '       g   i     i ; i; i)	NFrF   )Úduration_msÚmodel_call_countÚtool_call_countr8   r§  z'Hermes shared-metrics task close failed)ÚoutputrF  zZLeft shared-metrics task scope %s under a concurrent turn's scope; session close drains itT)%r¿   r,   rm  r7  r[   Útask_terminal_fieldsrª   ri   re   rt   r¬   r­   r±   r8   rµ   r_  Ú_count_session_turnr½   Ú_observe_model_turnr’  rh  r
   Úpop_relay_scope_if_topr   rJ   rI  r  r  rB   r¯   Úextendr®   r  rC   r  r1   r  )r  rE   rF   r    rk   r”   ÚpoppedrM  s   &&&&    r'   r×  Ú_Runtime._finish_task®  s  € Ø�}‰}× Ñ  Ó)ˆØŠ<ÙØ×$Ñ$ W°EÔ:Ø×%Ñ% gÐ/L°%Ð/L¸ÀGÑ/LÔMÜ×.Ò.Ø*ˆt× Ñ Ð* EÐ*Ü# D§O¡OÓ4Ü  ×!4Ñ!4Ó5Ü × 2Ñ 2Ó3°d×6RÑ6RÕRØ×(Ñ(ô
ˆð �9‰9××ÐØ×$Ñ$ W°F¸9Õ4EÔFØ��ˆØ×$Ñ$ W°FÔ;ð	YØ—]‘]Ø9Ø×!Ñ! 4¬×)MÑ)MÈtÏzÉzÐ[_×[fÑ[fØ×(<Ñ(<Ó(>ð #ó ˆFð
 ˜‹Ü—‘Ðyð  |Cô  Dà�M‰M×Ñ˜g tÔ,Ø×$Ñ$×+Ñ+¨D¯M©MÔ:Ø×)×)Ó)Ü˜×+Ñ+¨g×.@Ñ.@À'Ð-JÈGÔTØ#Ÿ}œ}�GÜ˜D×/Ñ/°'×2DÑ2DÀgÐ1NÐPWÖXñ  -÷ *ñ ÷	 *Ö)ñ ûð �M‰M×Ñ˜g tÔ,Ø×$Ñ$×+Ñ+¨D¯M©MÔ:Ø×)×)Ó)Ü˜×+Ñ+¨g×.@Ñ.@À'Ð-JÈGÔTØ#Ÿ}œ}�GÜ˜D×/Ñ/°'×2DÑ2DÀgÐ1NÐPWÖXñ  -÷ *×)×)Ð)ýs4   Ä#A.I Ç&AI
É
I	ÉAL*Ê4AL	Ì	L*ÌL'Ì"L*c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rE   r?   rk   r¨   r§  r#   r$   r@   r%   )r&   s   "r'   r(   rú   Ñ  s)   € ÷ 	.ñ 	. _ð 	.¸Hð 	.Èsð 	.ÐW[ñ 	.r)   c                	óÞ  € V P                   f,   \        VP                   4      V n         VP                  V n        V ;P                  ^,          un        V ;P
                  VR8H  ,          un        V ;P                  \        VP                  4      ,          un        V ;P                  \        VP                  4      VP                  ,           ,          un	        W n        \        4       V n        R # )Nr   )rª   rÖ   re   rÈ   rÅ   rÆ   rÑ   rt   r¬   rÒ   r­   r±   rÇ   r   rÉ   )rE   rk   r§  s   &&&r'   r„  Ú_Runtime._count_session_turnÐ  s¤   € à×ÑÒ'Ü#'¨×(9Ñ(9Ó#:ˆGÔ Ø$(§O¡OˆGÔ!Ø�Š˜Õ�Ø×Ò ¨8Ñ 3Õ3ÕØ×ÒœS ×!4Ñ!4Ó5Õ5ÕØ×Ò¤3 t×'9Ñ'9Ó#:¸T×=YÑ=YÕ#YÕYÕØ&ÔÜ+›~ˆÖr)   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rE   r?   rk   r¨   r”   r“   r$   r@   r%   )r&   s   "r'   r(   rú   Ü  s*   € ÷ +ñ +¨?ð +À(ð +ÐTbð +Ðgkñ +r)   c                óØ  a€ SP                   ;'       g    VP                  P                  pVP                  P                  VR,          WAP                  4       SP
                  eH   SP                  P                  '       d,   V P                  VP                  VP                  V3R l4       SP                   e}   \        P                  ! SP                  SP                  P                  4      '       dB   V P                  RV P                  VR\         P"                  \%        SP                   4      4       VR,          R8X  dn   Vej   \&        P(                  ! SP                  4      '       dD   V P                  RV P                  VR\         P*                  \&        P,                  ! RV4      4       SP                  P                  '       dœ   \&        P(                  ! SP                  4      '       dt   VP.                  P1                  SP                  W4\3        SP4                  4      \3        SP6                  4      SP8                  ,           R	7      pV P;                  W4       R# R# R# )
z_A turn the user saw end (session-close aborts excluded): trailing-failure state and interrupts.r§  Nc                ó:   <€ V P                  SP                  4      # rn   )r¼  r´   )rå   rk   s   &€r'   rÃ   Ú._Runtime._observe_model_turn.<locals>.<lambda>á  s   ø€ ÐTW×T_ÑT_Ð`d×`sÑ`sÔTtr)   z,Hermes shared-metrics engagement mark failedÚ
end_reasonÚuser_cancelledz*Hermes shared-metrics friction mark failedÚ	interrupt)Úrouter¾   r�   )r³   rË   Ú
last_routeÚobserve_turnrÉ   r´   rµ   r_  Ú_with_route_runr1   rÐ   rÜ   Úengaged_turnrª   r’  r2  r[   ÚENGAGEMENT_TURN_MARKrÖ   r×   ÚattendedÚMODEL_FRICTION_MARKÚfriction_fieldsrÍ   Úfinish_turnrt   r¬   r­   r±   Ú
_emit_rows)r  rE   rk   r”   r”  Úrowss   &&f&  r'   r…  Ú_Runtime._observe_model_turnÜ  sÁ  ø€ à× Ñ ×BÐB G×$7Ñ$7×$BÑ$BˆØ×Ñ×(Ñ(¨°	Õ):¸E×CWÑCWÔXØ×ÑÒ*¨t¯y©y×/B×/BÐ/BØ× Ñ  ×!3Ñ!3°W×5FÑ5FÔHtÔuØ×ÑÒ'¬K×,DÒ,DÀT×EVÑEVÐX\×XaÑXa×XkÑXk×,lÒ,lØ�M‰MØ>ÀÇ
Á
Ø˜œx×<Ñ<¼dÀ4×CSÑCSÓ>Tôð �,ÕÐ#3Ô3¸Ò8IÌfÏoÊoÐ^b×^oÑ^o×NpÒNpØ�M‰MØ<¸d¿j¹jØ˜œx×;Ñ;¼V×=SÒ=SÐT_ÐafÓ=gôð �9‰9××Ð¤6§?¢?°4×3DÑ3D×#EÒ#EØ×%Ñ%×1Ñ1Ø—	‘	˜6¼CÀ×@SÑ@SÓ<TÜ˜t×1Ñ1Ó2°T×5QÑ5QÕQð 2ó ˆDð �O‰O˜GÖ*ñ $FÑr)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r#  rŸ  z list[tuple[str, dict[str, str]]]r$   r@   r%   )r&   s   "r'   r(   rú   ó  s)   € ÷ uñ uÐ"8ð uÐ@`ð uÐeiñ ur)   c           	     	ó    € V FG  w  r4Vf    V P                  RV P                  W44       K(  V P                  RV P                  VR W44       KI  	  R # )Nz,Hermes shared-metrics efficiency mark failed)r’  Úrecord_process_markr2  )r  rE   rŸ  rÒ  rD  s   &&&  r'   rž  Ú_Runtime._emit_rowsó  sG   € Û‰JˆDØŠØ—‘ÐLÈd×NfÑNfÐhlÖsà—‘ÐLÈdÏjÉjÐZaÐcgÐimÖtó	 r)   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rE   r?   rk   rl   r–  r’   r    r!   r$   r@   r%   )r&   s   "r'   r(   rú   ú  s;   € ÷ Jñ JØ&ðJØ.=ðJØKUðJØ^lðJà	ñJr)   c                óÈ  € Ve   VP                   P                  '       g   R# VP                  VP                  R4      reVP                   P	                  WV4       V P                  V P                  VP                  4      4      pVP                  P                  WVVP                  \        4       VR7      pVe*   V P                  V\        P                  ! W…4      .4       R# R# )z]One finished primary call of a user turn: its tokens, and a cold cache read nobody announced.Nr†  )Úexpected)rµ   r_  r”   r,   Úadd_callÚ_consume_coldÚ	_cold_keyr1   rÍ   Úobserve_cachere   r   rž  r¸   Úcache_break_row)	r  rE   rk   r–  r    r”  r†  r§  Úcauses	   &&&&&    r'   rŽ  Ú_Runtime._observe_turn_callú  s³   € ð Š<˜tŸy™y×2×2Ð2ÙØ!×(Ñ(¨%¯)©)°GÓ*<ˆuØ�	‰	×Ñ˜5Ô(Ø×%Ñ% d§n¡n°W×5GÑ5GÓ&HÓIˆØ×"Ñ"×0Ñ0°¸z×?TÑ?TÔVbÓVdÐowÐ0ÓxˆØÒØ�O‰O˜G¤c×&9Ò&9¸%Ó&GÐ%HÖIñ r)   c               ó    € V ^8„  d   QhRRRR/# )r   r1   r#   r$   r%   )r&   s   "r'   r(   rú     s   € ÷ 8ñ 8˜cð 8 cñ 8r)   c                ó*   € \        4       ;'       g    T # )zPThe conversation (lineage root survives compression rotation), else the session.r   )r1   s   &r'   rª  Ú_Runtime._cold_key  s   € ô (Ó)×7Ð7¨ZÐ7r)   c               ó    € V ^8„  d   QhRRRR/# ©r   r"   r#   r$   r:   r%   )r&   s   "r'   r(   rú     s   € ÷ ñ  #ð ¨$ñ r)   c                ó.  € V P                   ;_uu_ 4        WP                  9   d    RRR4       R# RV P                  V&   \        V P                  4      R8”  d   V P                  P                  RR7       K8   RRR4       R#   + '       g   i     R# ; i)zUExpect the next read of ``key`` to be cold; False when a break was already announced.NFrÁ   )ÚlastT)r  r
  rt   Úpopitem©r  r"   s   &&r'   Ú_announce_coldÚ_Runtime._announce_cold  sl   € à�_�_‹_Ø×)Ñ)Ô)Ø÷ ‰_ð (,ˆD×Ñ Ñ$Ü�d×)Ñ)Ó*¨SÔ0Ø×#Ñ#×+Ñ+°Ð+Ö7Ø÷ �_�_Š_ús   •B±ABÂB	c               ó    € V ^8„  d   QhRRRR/# r³  r%   )r&   s   "r'   r(   rú     s   € ÷ ?ñ ? ð ?¨ñ ?r)   c                	ó¤   € V P                   ;_uu_ 4        V P                  P                  VR 4      RJ uuRRR4       #   + '       g   i     R# ; iró  )r  r
  rB   r·  s   &&r'   r©  Ú_Runtime._consume_cold  s2   € Ø�_�_‹_Ø×&Ñ&×*Ñ*¨3°Ó6¸$Ð>÷ �_�_‹_ús	   •>¾A	c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   r­  r#   r”  r“   r1   r$   r@   r%   )r&   s   "r'   r(   rú     s0   € ÷ Gñ G¨cð G¸.ð GÐVYð GÐ^bñ Gr)   c                ó¤   € V P                  V P                  V4      4      '       d*   V P                  R\        P                  ! W4      .4       R# R# )z¨Hermes invalidated the prefix itself: count it, and don't recount the cold read it causes.
Several causes before one cold read are one break (the first cause names it).N)r¸  rª  rž  r¸   r¬  )r  r­  r”  r1   s   &&&&r'   Úrecord_known_cache_breakÚ!_Runtime.record_known_cache_break  s?   € ð ×Ñ˜tŸ~™~¨jÓ9×:Ò:Ø�O‰O˜D¤3×#6Ò#6°uÓ#DÐ"EÖFñ ;r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r   r1   r#   Úagentr   Útools_for_apirê  r$   r@   r%   )r&   s   "r'   r(   rú      s/   € ÷ Uñ U¨sð U¸3ð UÈtð UÐX\ñ Ur)   c                	ó²  € V'       d   V P                  R V/4      MRpVf   R# \        \        VRR4      4      \        V4      \        V4      3pVP                  ;_uu_ 4        VP
                  '       g   VP                  P                  V8X  d    RRR4       R#  RRR4       \        P                  ! W#4      pVP                  ;_uu_ 4        VP
                  '       d    RRR4       R# WTP                  n        VP                  P                  P                  ! V!  pRRR4       \        P                  ! \        VRR4      \        VRR4      4      pX'       dS   V P                  V P                  V4      4      '       d+   V P!                  V\        P"                  ! RV4      .4       R# R# R#   + '       g   i     EL; i  + '       g   i     L­; i)r1   Nrã   ÚproviderÚmodelÚtoolset_change)rá  rs   Úgetattrrt   r¼   r½   rÍ   Ú	tools_keyr¸   Útool_snapshotrã   r¼  r×   r³   r¸  rª  rž  r¬  )	r  r1   rÄ  rÅ  rE   r"   ÚsnapshotÚchangedr”  s	   &&&&     r'   Úrecord_session_toolsÚ_Runtime.record_session_tools   sV  € ß?I�$—-‘- ¨zÐ :Ô;ÈtˆØŠ?ÙÜ”'˜% ¨$Ó/Ó0´"°]Ó2CÄSÈÓEWÐXˆØ�\�\‹\Ø��ˆ '×"4Ñ"4×">Ñ">À#Ô"EØ÷ ‰\Ø"E÷ ô ×$Ò$ UÓ:ˆØ�\�\‹\Ø��ˆØ÷ ‰\ð ,/×ÑÔ(Ø×(Ñ(×.Ñ.×6Ò6¸ÑAˆG÷	 ô
 ×"Ò"¤7¨5°*¸dÓ#CÄWÈUÐT[Ð]aÓEbÓcˆß�t×*Ñ*¨4¯>©>¸*Ó+E×FÒFØ�O‰O˜G¤c×&9Ò&9Ð:JÈEÓ&RÐ%SÖTñ G‰7÷ �\ˆ\ú÷ �\ús   Á#/F2ÃGÃ-4GÆ2G	ÇG	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úold_idr#   Únew_idr$   r@   r%   )r&   s   "r'   r(   rú   2  s!   € ÷ 'ñ ' Sð '°#ð '¸$ñ 'r)   c           	     óØ  € V P                  RV/4      pV P                  ;_uu_ 4        V P                  P                  V4      pVfe   Vf    RRR4       R# Tp\	        V0VP
                  VP                  P                  VP                  R7      V P                  V&   W@P                  V&   V P                  V,          P                  P                  V4       W@P                  V&   \        V P                  4      R\        )  pRRR4       V P                  RV/4      pVe   V P                  V4       Vet   VP                  ;_uu_ 4        VP                   '       * Vn        VP"                  ;'       d    VP$                  '       * pRRR4       X'       d   V P'                  RV/4       X F  pV P)                  V4       K  	  R#   + '       g   i     LË; i  + '       g   i     LZ; i)a  Compression rotated ``old_id`` to ``new_id``: the new id continues the same conversation.
Only this explicit hand-off links segments (a reset, /new or /branch parent is a new
conversation). The old segment closes into the lineage now, or once its in-flight turn ends.r1   N)rà   rå   rç   rÎ   )rá  r	  r  r,   rß   rÐ   rÍ   rç   rÎ   r  rà   ry  rê  Ú_MAX_LINEAGESr&  r¼   r½   rÌ   r¿   rØ  Ú_flush_lineage)	r  rÒ  rÓ  Úoldr"   ÚoverflowÚnewÚidleÚstales	   &&&      r'   Úrotate_segmentÚ_Runtime.rotate_segment2  s~  € ð �m‰m˜\¨6Ð2Ó3ˆØ××ÓØ×"Ñ"×&Ñ& vÓ.ˆCØŠ{Ø’;Ø÷	  Ñð
 �Ü&2Ø ˜ s§}¡}¸C¿N¹N×<PÑ<PÐ]`×]kÑ]kô'm�—‘˜sÑ#à+.× Ñ  Ñ(Ø�N‰N˜3Õ×$Ñ$×(Ñ(¨Ô0Ø'*×Ñ˜VÑ$Ü˜DŸN™NÓ+¨O¬m¨^Ð<ˆH÷  ð �m‰m˜\¨6Ð2Ó3ˆØŠ?Ø×Ñ˜cÔ"ØŠ?Ø——“Ø#&§;¡;œ�”Ø—|‘|×5Ð5¨C¯I©I¬�÷ ÷ Ø×"Ñ" L°&Ð#9Ô:ÛˆEØ×Ñ Ö&ó ÷+  ×ú÷  —ús   ¨%GÁB,GÅ<GÇG	ÇG)	c               ó    € V ^8„  d   QhRRRR/# )r   r1   r#   r$   ræ   r%   )r&   s   "r'   r(   rú   O  s   € ÷ Bñ B¨ð B°ñ Br)   c                	óö   € V P                   ;_uu_ 4        V P                  P                  V P                  P                  VR 4      4      pVe   VP                  MRuuRRR4       #   + '       g   i     R# ; i)r+   N)r	  r  r,   r  rç   )r  r1   Úlineages   && r'   Ú_lineage_spentÚ_Runtime._lineage_spentO  sR   € Ø××ÓØ—n‘n×(Ñ(¨×)9Ñ)9×)=Ñ)=¸jÈ"Ó)MÓNˆGØ$+Ò$7�7—=’=¸T÷  ××Óús   •AA'Á'A8	c               ó    € V ^8„  d   QhRRRR/# r0  r%   )r&   s   "r'   r(   rú   T  s   € ÷ 	8ñ 	8 Oð 	8¸ñ 	8r)   c                óŠ  € V P                  VP                  4      pVe   W!P                  n        V P                  ;_uu_ 4        V P
                  P                  V P                  P                  VP                  R4      4      pVe    VP                  e   VP                  Vn        RRR4       R#   + '       g   i     R# ; i)z¦A rotated-to segment's /undo and /retry reach the turns the earlier segments spent, and its
connector chain continues the earlier segments' searches and descriptions.Nr+   )	rá  r1   rÍ   rç   r	  r  r,   r  rÎ   )r  rE   rç   rà  s   &&  r'   r&  Ú_Runtime._share_spentT  s”   € ð ×#Ñ# G×$6Ñ$6Ó7ˆØÒØ',×ÑÔ$Ø××ÓØ—n‘n×(Ñ(¨×)9Ñ)9×)=Ñ)=¸g×>PÑ>PÐRTÓ)UÓVˆGØÒ" w×'9Ñ'9Ò'EØ%,×%7Ñ%7�Ô"÷  ××Òús   ÁA#B1Â1C	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r1   r#   Úownzengagement_.RouteRun | Noner¸  z%Callable[[engagement_.RouteRun], Any]r$   r   r%   )r&   s   "r'   r(   rú   _  s,   € ÷ <ñ <Øð<Ø$?ð<ØInð<à	ñ<r)   c                ó  € V P                   ;_uu_ 4        V P                  P                  V P                  P                  VR4      4      pVe   VP                  MTpVe	   V! V4      MRuuRRR4       #   + '       g   i     R# ; i)z^Apply ``update`` to the conversation's model-turn run (the lineage's, shared by its segments).r+   N)r	  r  r,   r  rå   )r  r1   rç  r¸  rà  rå   s   &&&&  r'   r—  Ú_Runtime._with_route_run_  sc   € ð ××ÓØ—n‘n×(Ñ(¨×)9Ñ)9×)=Ñ)=¸jÈ"Ó)MÓNˆGØ!(Ò!4�'—+’+¸#ˆCØ"%¢/‘6˜#”;°t÷  ××Óús   •AA5Á5B	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r1   r#   Ústateúmodel_.ModelSessionState | Nonerä   úengagement_.SessionTally | Nonerã   râ   r$   z]tuple[model_.ModelSessionState | None, engagement_.SessionTally | None, eff.ToolUsage | None]r%   )r&   s   "r'   r(   rú   h  s7   € ÷ :ñ :Øð:Ø&Eð:ØNmð:àð:ð 
gñ:r)   c                óz  € V P                   ;_uu_ 4        V P                  P                  VR4      pVe   V P                  P	                  V4      MRpVf   W#V3uuRRR4       # VP
                  P                  V4       Ve6   Ve2   \        VP                  V4       VP                  P                  V4       VP                  P                  V4       VP
                  '       d   RuuRRR4       # V P                  V RRR4       XP                  VP                  VP                  3#   + '       g   i     L3; i)z¢This segment's context peak, tally and tool usage, or, for a lineage segment, the
conversation's merged ones once its last open segment closes (None before that).N)NNN)r	  r  rB   r  r,   rà   Údiscardrô   rá   rä   Úabsorbrã   )r  r1   rë  rä   rã   r"   rà  s   &&&&&  r'   Ú_close_segmentÚ_Runtime._close_segmenth  só   € ð ××ÓØ×"Ñ"×&Ñ& z°4Ó8ˆCØ14²�d—n‘n×(Ñ(¨Ô-ÀdˆGØŠØ UÐ*÷	  Òð
 �L‰L× Ñ  Ô,ØÒ  UÒ%6Ü˜WŸ\™\¨5Ô1Ø—‘×$Ñ$ UÔ+Ø�M‰M× Ñ  Ô'Ø�|�|ˆ|Ø'÷  Òð —‘˜sÐ#÷  ð �|‰|˜WŸ]™]¨G¯M©MÐ9Ð9÷  ×ús   •AD*Á%B D*Ã&D*Ã2D*Ä*D:	c               ó    € V ^8„  d   QhRRRR/# ©r   r1   r#   r$   r@   r%   )r&   s   "r'   r(   rú   }  s   € ÷ iñ i°ð i¸ñ ir)   c           
     óŒ   € V'       d<   V P                   ! R.V P                  VRR\        P                  ! 4       4      O5!   R# R# )zPA rotated-to segment closed (or the process ended) before it served a turn here.N)Ú_emit_summary_rowsrñ  r¸   ré   )r  r1   s   &&r'   râ  Ú_Runtime._close_unseen_segment}  s9   € çØ×#Ò# DÐh¨4×+>Ñ+>¸zÈ4ÐQUÔWZ×WdÒWdÓWfÓ+gÖhñ r)   c               ó    € V ^8„  d   QhRRRR/# )r   r"   r#   r$   r@   r%   )r&   s   "r'   r(   rú   ‚  s   € ÷ Vñ V #ð V¨$ñ Vr)   c                óx  € V P                   ;_uu_ 4        V P                  P                  VR4      pVe   VP                  MR F  pV P                  P                  VR4       K!  	  RRR4       Xe5   V P                  RVP                  VP                  VP                  4       R# R#   + '       g   i     LJ; i)z^Backstop for a conversation a surface never closed: report what it holds, detach its segments.Nr%   )	r	  r  rB   rà   r  rö  rá   rä   rã   )r  r"   rà  rí   s   &&  r'   rÖ  Ú_Runtime._flush_lineage‚  sŽ   € à××ÓØ—n‘n×(Ñ(¨¨dÓ3ˆGØ+2Ò+>˜7Ÿ<š<ÀBÒF�Ø× Ñ ×$Ñ$ W¨dÖ3ñ G÷  ð ÒØ×#Ñ# D¨'¯,©,¸¿¹ÀwÇ}Á}ÖUñ ÷	  ×ús   •AB)Â)B9	c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r   rE   r#  rá   rì  rä   rí  rã   zeff.ToolUsage | NoneÚextraztuple[str, Any]r$   r@   r%   )r&   s   "r'   r(   rú   ‹  sF   € ÷ 
]ñ 
]Ø-ð
]Ø5Tð
]à.ð
]à7Kð
]àUdð
]ð 
ñ
]r)   c           	     	ó2  € \         P                  Ve   VP                  4       MR 3\         P                  Ve   VP	                  4       MR 3.Ve   VP                  4       MROVOpT P                  Y UUu. uF  w  rxVf   K  Wx3NK  	  upp4       R # u uppi )Nr%   )r[   ÚCONTEXT_PEAK_MARKÚcontext_peak_fieldsÚSESSION_MARKr”   rŸ  rž  )	r  rE   rá   rä   rã   rü  ÚmarksrÒ  rD  s	   &&&&&*   r'   rö  Ú_Runtime._emit_summary_rows‹  s�   € ô
 ×'Ñ'ÀtÒGW¨×)AÑ)AÔ)CÐ]aÐbÜ×"Ñ"°eÒ6G E§L¡L¤NÈTÐRð
ð $Ò/ˆe�j‰jŒl°Rð
ð ð	
ˆð 	�‰˜ÀÔ![Á±:°4È$¤, 4£,ÁÒ![Ö\ùÓ![s   Á5BÂBc               ó    € V ^8„  d   QhRRRR/# r0  r%   )r&   s   "r'   r(   rú   —  s   € ÷ =ñ =¨_ð =Àñ =r)   c                ó  € VP                   p\        VP                  4      ;'       d!    VRJ;'       d    VP                  R4      R8g  pV'       dy   \        P
                  ! VP                   VP                  VP                  VP                  VP                  VP                  VP                  VP                  VP                  4	      MRpV'       d3   \        P                  ! V4      '       d   VP                  P                   M\"        P$                  ! 4       pT;'       g    / P                  RR4      Vn        T P)                  VP*                  V'       d   VP,                  MRWE4      pV'       d6   VP.                  '       g$   VP,                  P1                  \3        4       4      MRpVeE   \        P                  ! V4      '       d)   \4        P6                  \        P8                  ! RV4      3.M. pV P:                  ! V.VOVO5!   R# )zÂOne hermes.session.count and context-peak row per closed top-level conversation (delegated
children excluded; compression-rotated segments merged), its tool usage, plus a quick-abandon friction.NrR   Ú	delegatedr\   r—   Úquick_abandon)rª   r:   rÅ   r,   rÜ   rê   rÆ   rÇ   rÈ   rÉ   rÑ   rÒ   rÓ   r×   rš  rÍ   rã   r¸   ré   Úsurfacerñ  r1   rË   rÌ   Úquick_abandon_router   r[   r›  rœ  rö  )	r  rE   rr  Úcountedrä   rã   ÚmergedÚ	abandonedÚfrictions	   &&       r'   rå  Ú_Runtime._emit_session_summary—  sœ  € ð ×$Ñ$ˆÜ�w—}‘}Ó%×fÐf¨%°tÐ*;×fÐfÀÇ	Á	È,Ó@WÐ[fÑ@fˆ÷ ô ×(Ò(Ø× Ñ  '§-¡-°×1EÑ1EÀw×G[ÑG[Ø×!Ñ! 7×#7Ñ#7¸×9JÑ9JÈG×LcÑLcÐel×etÑetô
ð ð 	÷ -4¼¿ºÈ×8NÒ8N�×"Ñ"×(Ò(ÔTW×TaÒTaÓTcˆØŸ˜ "×)Ñ)Ð*=¸yÓIˆŒØ×$Ñ$ W×%7Ñ%7×PW¸×9LÒ9LÐ]aÐchÓpˆçOVÐ_f×_o×_oÐ_o�G×'Ñ'×;Ñ;¼L»NÔKÐuyˆ	ð Ò$¬¯ª¸×)?Ò)?ô ×*Ñ*¬F×,BÒ,BÀ?ÐT]Ó,^Ð_Ñ`ØEGð 	ð 	×Ò Ð<¨&Ð<°8Ö<r)   c               ó    € V ^8„  d   QhRRRR/# rô  r%   )r&   s   "r'   r(   rú   «  s   € ÷ pñ p¨cð p°dñ pr)   c                ót  € V P                  RV/4      pVe   VP                  M\        P                  ! 4       ;_uu_ 4        T P	                  Ye   VP
                  MRR 4      pRRR4       Xe5   V P                  \        P                  \        P                  ! V!  4       R# R#   + '       g   i     LJ; i)zYA counted /model switch: how many turns the model being left served in this conversation.r1   Nc                ó"   € V P                  4       # rn   )Útake)rå   s   &r'   rÃ   Ú._Runtime.record_switch_after.<locals>.<lambda>°  s   € Ð\_×\dÑ\dÔ\fr)   )rá  r¼   r  Únullcontextr—  rÐ   r£  r[   ÚMODEL_SWITCH_AFTER_MARKrÜ   Úswitch_after_fields)r  r1   rE   Útakens   &&  r'   Úrecord_switch_afterÚ_Runtime.record_switch_after«  s”   € à—-‘- ¨zÐ :Ó;ˆØ$Ò0ˆW�\Š\´j×6LÒ6LÓ6N×NÑNØ×(Ñ(ØÒ1D˜G×-Ò-È$ÑPfóˆE÷ Oð ÒØ×$Ñ$¤X×%EÑ%EÄ{×GfÒGfÐhmÑGnÖoñ ÷	 O×Nús   Á$B'Â'B7	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# ©
r   Úsignalr#   r1   Úfallback_router“   rÅ   r6   r$   r@   r%   )r&   s   "r'   r(   rú   µ  s1   € ÷ *ñ * cð *°sð *ÈNð *Ðcfð *Ðosñ *r)   c                ó¦  € V'       d   V P                  RV/4      MRpR. rvVe   VP                  M\        P                  ! 4       ;_uu_ 4        Ve   VP                  P
                  pV\        P                  9   da   Ve   VP                  M\        P                  ! 4       pVf   V P                  V4      ;p	e   W˜n        TP                  YT;'       g    T4      pRRR4       \        P                  ! Y;'       g    T4      p
V
e5   V P!                  \        P"                  V
4       V P%                  RV4       R# R#   + '       g   i     Lj; i)z˜A user friction action, attributed to the session's last primary model when known; an
/undo or /retry also counts the tokens of the turns it threw away.r1   N)rá  r¼   r  r  rË   r•  r[   ÚWASTE_REASONSrÍ   r¸   rÙ   rá  rç   Údiscard_turnsr×   rœ  r£  r›  rž  )r  r  r1   r  rÅ   rE   r”  ÚwastedrÍ   rç   rD  s   &&&&&      r'   Úrecord_frictionÚ_Runtime.record_frictionµ  s  € ÷ @J�$—-‘- ¨zÐ :Ô;ÈtˆØ˜bˆvà$Ò0ˆW�\Š\´j×6LÒ6LÓ6N×NÑNØÒ"Ø×+Ñ+×6Ñ6�Øœ×/Ñ/Ô/Ø3:Ò3F˜W×/Ò/ÌC×LaÒLaÓLc�
Ø’?°×1DÑ1DÀZÓ1PÐ(P¨Ò']Ø',Ô$Ø#×1Ñ1°&À×AXÐAXÈ.ÓY�÷ Oô ×%Ò% f×.EÐ.E°~ÓFˆØÒØ×$Ñ$¤X×%AÑ%AÀ4ÔHØ�O‰O˜D &Ö)ñ ÷ O×Nús   ÁBE ÃE Å E	c               ó$   € V ^8„  d   QhRRRRRR/# ©r   rÒ  r#   rD  r!   r$   r@   r%   )r&   s   "r'   r(   rú   È  s&   € ÷ iñ i¨ð i°>ð iÀdñ ir)   c                ó†   € V P                  V P                  P                  P                  WV P	                  4       R7       R# )zOA process-level fact with no owning task (setup, installs, commands, switches).rÍ  N)rS  r   rH  r    rI  )r  rÒ  rD  s   &&&r'   r£  Ú_Runtime.record_process_markÈ  s3   € ð 	×Ñ˜tŸz™z×/Ñ/×5Ñ5°tÐQU×QeÑQeÓQgÐÖhr)   c               ó    € V ^8„  d   QhRRRR/# ©r   r  z list[tuple[str, dict[str, Any]]]r$   r6   r%   )r&   s   "r'   r(   rú   Í  s   € ÷ 2ñ 2Ð0Pð 2ÐUXñ 2r)   c                ó€  € \         P                  ! 4       P                  p/ V P                  4       C\        P
                  V/CpV F7  w  rEV P                  V P                  P                  P                  WEVR7       K9  	  V P                  P                  P                  4        V P                  P                  V4      # )zNEmit ``marks`` and wait for the store; how many settled without a store error.rÍ  )ÚuuidÚuuid4ÚhexrI  r[   ÚCOMMIT_TICKET_KEYrS  r   rH  r    r  r0  r  Ú
take_saved)r  r  ÚticketrF  rÒ  rD  s   &&    r'   Úrecord_process_marks_savedÚ#_Runtime.record_process_marks_savedÍ  s�   € ä—’“×!Ñ!ˆØQ�d×*Ñ*Ó,ÐQ¬h×.HÑ.HÈ&ÑQˆÛ‰JˆDØ×"Ñ" 4§:¡:×#3Ñ#3×#9Ñ#9¸4ÐU]Ð"Ö^ñ  à�
‰
×Ñ×$Ñ$Ô&Ø�‰×)Ñ)¨&Ó1Ð1r)   c               ó    € V ^8„  d   QhRRRR/# r)  r%   )r&   s   "r'   r(   rú   Ö  s   € ÷ 	ñ 	¨^ð 	Àñ 	r)   c           	     	ó�  € \         P                  ! VP                  R 4      RVP                  R4      VP                  R4      ;'       g    VP                  R4      VP                  R4      R7      pVeR   V P                  V P                  P
                  P                  \        P                  VV P                  4       R7       R# R# )	r†  Ú	auxiliaryÚaux_taskÚresponse_modelrÈ  rÇ  )r‰  r5  rÈ  rÇ  NrÍ  )
r�  r‘  r,   rS  r   rH  r    r[   r“  rI  )r  r    r—  s   && r'   Úrecord_auxiliary_tokensÚ _Runtime.record_auxiliary_tokensÖ  sž   € Ü×+Ò+Ø�I‰I�gÓ¨+ÀÇ	Á	È*Ó@UØ—)‘)Ð,Ó-×CÐC°·±¸7Ó1CÈeÏiÉiÐXbÓNcô
ˆð ÒØ×"Ñ"Ø—
‘
× Ñ ×&Ñ&¬×(BÑ(BÈØ×-Ñ-Ó/ð #ö ñ r)   c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   rú   á  s   € ÷ 5ñ 5˜ñ 5r)   c                	ó¦   € V P                  V P                  P                  P                  4      pVe   V P                  V P                  4       R # R # rn   )r4  r  r;  Ú create_and_export_package_if_dueÚ_send_exported_packages)r  Úexporteds   & r'   r1  Ú_Runtime._exportá  s?   € Ø—:‘:˜dŸo™o×3Ñ3×TÑTÓUˆð ÒØ�J‰J�t×3Ñ3Ö4ñ  r)   c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   rú   è  s   € ÷ *ñ *¨ñ *r)   c           	     	ó\  €  \        4       pT P	                  R\
        T P                  P                  TP                  4       TP                  '       g   R# T P                  ;_uu_ 4        T P                  e!   T P                  P                  4       '       gO   \        P                  ! T P                  TP                  3RRR7      T n
        T P                  P!                  4        RRR4       R#   \         d    \        P                  R RR7        R# i ; i  + '       g   i     R# ; i)z)Unable to read shared-metrics send policyTr
  Nz4Unable to record a shared-metrics consent transitionzhermes-shared-metrics-send)Útargetre  rC  Údaemon)Ú_resolved_send_configr  r  r  r’  Ú_reconcile_store_consentr  r;  Úsendr  r  r  rÔ   ÚThreadÚ_run_send_passÚendpointrr  )r  Úresolveds   & r'   r<  Ú _Runtime._send_exported_packagesè  sâ   € ð	Ü,Ó.ˆHð 	�‰ØBÜ$ d§o¡o×&;Ñ&;¸X¿]¹]ô	
ð �}�}ˆ}Ùà�_�_‹_à× Ñ Ò(°×0AÑ0A×0JÑ0J×0LÒ0LÜ$-×$4Ò$4Ø×.Ñ.°h×6GÑ6GÐ5IØ5¸dô%�Ô!ð ×!Ñ!×'Ñ'Ô)÷ ‰_øô ô 	Ü�L‰LÐDÈtˆLÔTÚð	ú÷ �_ˆ_ús$   ‚
C1 Á*.DÂADÃ1"DÄDÄD+	c               ó    € V ^8„  d   QhRRRR/# )r   rH  r#   r$   r@   r%   )r&   s   "r'   r(   rú     s   € ÷ 	Nñ 	N sð 	N¨tñ 	Nr)   c                	óœ   a€ ^ RI Hp R V3R llpV! V P                  P                  SVR7      pV P	                  RVP
                  4       R# )rg   )ÚSharedMetricsSenderc               ó   € V ^8„  d   QhRR/# ©r   r$   r:   r%   )r&   s   "r'   r(   Ú-_Runtime._run_send_pass.<locals>.__annotate__  s   € ÷ 	Cñ 	C ñ 	Cr)   c                 ó^   <€ \        4       p V P                  ;'       d    V P                  S8H  # )z;Re-read consent so revoking `send` stops an in-flight pass.)rC  rE  rH  )rI  rH  s    €r'   Ústill_consentedÚ0_Runtime._run_send_pass.<locals>.still_consented  s(   ø€ ä,Ó.ˆHØ—=‘=×BÐB X×%6Ñ%6¸(Ñ%BÐBr)   )Úconsent_checkzShared-metrics send pass failedN)Ú.hermes_cli.observability.shared_metrics_senderrM  r  r;  r’  Úsend_pending)r  rH  rM  rR  Úsenders   &f   r'   rG  Ú_Runtime._run_send_pass  sB   ø€ ÝV÷	Cð 	Cñ
 % T§_¡_×%:Ñ%:¸HÐTcÔdˆØ�‰Ð7¸×9LÑ9LÖMr)   c               ó   € V ^8„  d   QhRR/# )r   r$   r“   r%   )r&   s   "r'   r(   rú     s   € ÷ 
ñ 
 ñ 
r)   c                	óŠ   € \         P                  \         P                  \        P                  V P
                  P                  /# rn   )r[   Ú
SCHEMA_KEYÚSCHEMA_VERSIONr
   ÚRUNTIME_INSTANCE_KEYrø   rý   rö  s   &r'   rI  Ú_Runtime._event_metadata  s2   € ä×Ñ¤×!8Ñ!8Ü×.Ñ.°·	±	×0DÑ0Dð
ð 	
r)   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   Úmessager#   rc  rd  re  r   rf  r$   r%   )r&   s   "r'   r(   rú     s2   € ÷ ñ ˜#ð Ð);ð ÀCð ÐSVð Ð[^ñ r)   c                óf   €  V! V/ VB #   \          d    \        P                  T RR7        R# i ; i)z@Run ``callback``; log-and-swallow any exception, returning None.Tr
  N)r  r  r2  )r`  rc  re  rf  s   &&*,r'   r’  Ú_Runtime._guarded  s9   € ð	Ù˜TÐ, VÑ,Ð,øÜô 	Ü�N‰N˜7¨TˆNÔ2Úð	ús   ‚
 Š"0¯0c               ó(   € V ^8„  d   QhRRRRRRRR/# rk  r%   )r&   s   "r'   r(   rú     s/   € ÷ añ aÐ/ð a¸ð aÀsð aÈsñ ar)   c                	ó0   € V P                   ! R V.VO5/ VB # )z&Hermes shared metrics operation failed)r’  )Úclsrc  re  rf  s   &&*,r'   r4  Ú_Runtime._safe  s    € à�|Š|ÐDÀhÐ`ÐQUÒ`ÐY_Ñ`Ð`r)   )r  r
  r  r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r  r  rø   r   r  rn   )g       @©rŽ   )Rr›   rœ   r�   rž   rè   r  r%  r-  r+  r5  r2  r[  r`  rh  rS  r�  r˜  r   r¬  rÀ  r¶  rÓ  rÜ  rØ  r  rì  rú  rí  r   rá  r‹  rw  rG  rÙ  r(  rë  rã  rO  rW  Ústaticmethodrž  rª  rP  r¨  rŸ  r»  rm  r�  r7  rŒ  r×  r„  r…  rž  rŽ  rª  r¸  r©  rÀ  rÏ  rÜ  rá  r&  r—  rñ  râ  rÖ  rö  rå  r  r!  r£  r0  r7  r1  r<  rG  rI  r’  Úclassmethodr4  r    r%   r)   r'   rö   rö   æ   s   † ÙI÷%'õN8õ$.õHõ
Jõ
õ1õf'õZõ
)õ(VõT"]õHHõ$õ0+PõZõ$8õ8WõAõ õ !õ
õ*-÷	VõBõ^ð	Ø6;÷	õZõ(õ*	4õõ	ðØGL÷õ"Mð ôeó ðeð ô
ó ð
ðð ÷õ,Aõ<
õ
õ cõ
õ(Zð ô?ó ð?õ ðD ô	.ó ð	.õ+õ.uõJð ô8ó ð8õõ?õGõUõ$'õ:Bõ
	8õ<õ:õ*iõ
Võ
]õ=õ(p÷*õ&iõ
2õ	õ5õ*õ4	Nõ
ð ôó ðð ôaó ôar)   rö   c               ó   € V ^8„  d   QhRR/# )r   r$   r!   r%   )r&   s   "r'   r(   r(   !  s   € ÷ 	,ñ 	,�^ñ 	,r)   c                 ó0   € ^ RI Hp  V ! 4       ;'       g    / # )a6  Read-only config snapshot (lazy import: tests patch ``hermes_cli.config``).

Collection consent is profile-owned: managed overlays cannot opt a profile in or out.
The read-only path matters because this gate runs 2-3x per agent turn and the mutable
read_raw_config() paid a full config deepcopy on every call.
©Úread_raw_config_readonly)Úhermes_cli.configrm  rl  s    r'   r>  r>  !  s   € õ ;á#Ó%×+Ð+¨Ð+r)   c                 ó.   € ^ RI Hp  V ! \        4       4      # )zBResolve the opt-in send policy from the read-only config snapshot.©Úresolve_send_config)Ú3hermes_cli.observability.shared_metrics_send_configrq  r>  rp  s    r'   rC  rC  -  s   € åWáœ{›}Ó-Ð-r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r;  r   Úsend_enabledr:   r$   r@   r%   )r&   s   "r'   r(   r(   4  s"   € ÷ =ñ =Ð$6ð =Àdð =Ètñ =r)   c           	     óð   € ^ RI Hp ^ RIHp V P	                  4       ;_uu_ 4       pV! V4      ;_uu_ 4        V! WA4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)rg   )Úreconcile_send_consent)Ú	write_txnN)rU  rv  Úhermes_cli.sqlite_utilrw  Ú_connection)r;  rt  rv  rw  Ú
connections   &&   r'   rD  rD  4  sL   € ÝUÝ0à	×	Ñ	×	Ô	 
Ù�z×"Õ"Ù" :Ô<÷ #÷ 
Ñ	ß"×"ú÷ 
×	Ð	ús!   ¥A$¶	A	¿A$ÁA!ÁA$Á$A5	c               ó   € V ^8„  d   QhRR/# rO  r%   )r&   s   "r'   r(   r(   =  s   € ÷ ñ �ñ r)   c                 ó@  € \         P                  ! 4       p  \        4       pR F,  p\        V\        4      '       d   VP                  V4      MRpK.  	  \        V\        4      '       d   VP                  R4      RJ d   R# V \        9  d   R# \        ;_uu_ 4        \        P                  V R4      p\        V\        4      '       d   VP                  4        RRR4       R#   \         d    \        P                  RRR7       Rp Lçi ; i  + '       g   i     R# ; i)z?Return the shared-metrics policy for the active Hermes profile.z+Unable to read Hermes shared-metrics policyTr
  NÚenabledF)Ú	telemetryÚshared_metrics)r
   Úcurrent_profile_keyr>  r  r  r  r9   rÖ   r,   r   Ú_RUNTIME_LOCKrB   rö   rú  )Úprofile_keyÚconfigr"   Úruntimes       r'   r}  r}  =  sÚ   € ä×3Ò3Ó5€KðÜ!“mˆó /ˆÜ$.¨v´t×$<Ò$<�—‘˜C”À$Šñ /ä�&œ$×Ò F§J¡J¨yÓ$9¸TÓ$AÙØœ)Ô#Ùß	ŽÜ—-‘- ¨TÓ2ˆÜ�gœx×(Ò(Ø×ÑÔ ÷ 
ñ øô ô Ü�‰ÐBÈTˆÔRØŠðú÷ 
Žñ ús   —
C" Â=DÃ"$D	ÄD	ÄD	c               ó    € V ^8„  d   QhRRRR/# )r   Ú	hook_namer#   r$   r:   r%   )r&   s   "r'   r(   r(   R  s   € ÷ 4ñ 4˜Cð 4 Dñ 4r)   c                ó8   € V \         9   ;'       d    \        4       # rn   )ÚHANDLED_HOOKSr}  )r†  s   &r'   Úhandles_hookr‰  R  s   € ØœÑ%×3Ð3¬'«)Ð3r)   Fc               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   r(   Y  s   € ÷ Yñ Y dñ Yr)   c                 óh  € \         '       d   R# Rs  ^ RIHp  ^ RIHp \        4       pV! 4       R,          R,          R,          pVP                  '       g   VP                  4       '       g   R# \        V ! 4       VP                  4       R#   \         d    \        P                  RRR	7        R# i ; i)
ax  Reconcile consent windows with config, once per process.

Runs BEFORE and INDEPENDENT of the collection gate, so a user with ``enabled: false``
still gets send-consent windows reconciled. Skipped only when there is no store on disk
AND consent is off: nothing to protect, and creating ``~/.hermes/telemetry`` for every
fully-disabled user would be the wrong behaviour change.
NTr   )Úget_hermes_homer~  r  zmetrics.sqlite3z/Unable to reconcile shared-metrics send consentr
  )Ú_consent_reconcile_doneÚ'hermes_cli.observability.shared_metricsr   Úhermes_constantsrŒ  rC  rE  ÚexistsrD  r  r  r2  )r   rŒ  rI  Údefault_paths       r'   Ú_reconcile_send_consent_oncer’  Y  s‘   € ÷ ÓÙØ"ÐðYåNÝ4ä(Ó*ˆñ 'Ó(¨;Õ6Ð9IÕIÐL]Õ]ˆØ�}�}ˆ} \×%8Ñ%8×%:Ò%:ÙÜ Ñ!3Ó!5°x·}±}ÖEøÜô YÜ�‰ÐHÐSWˆ×XðYús   ’AB Á.B Â"B1Â0B1c               ó$   € V ^8„  d   QhRRRRRR/# )r   r†  r#   rf  r   r$   r@   r%   )r&   s   "r'   r(   r(   u  s&   € ÷ Zñ Z ð Z°ð Z¸ñ Zr)   c                ó  € \        4        \        V 4      '       d   \        P                  ! 4       '       g   R# \	        4       pVf   R#  \
        V ,          ! W!4       R#   \         d    \        P                  RT RR7        R# i ; i)zCProject one Hermes lifecycle event into the core Relay integration.Nz%Hermes shared metrics hook failed: %sTr
  )	r’  r‰  r
   Úrelay_instrumentation_enabledÚ_get_runtimeÚ_HOOK_HANDLERSr  r  r2  )r†  rf  r„  s   &, r'   Úobserve_lifecycler˜  u  sk   € ä Ô"Ü˜	×"Ò"¬-×*UÒ*U×*WÒ*WÙÜ‹n€GØ‚ÙðZÜ�yÖ! 'Ö2øÜô ZÜ�‰Ð>À	ÐTXˆ×YðZús   Á
A Á#BÂBc               ó    € V ^8„  d   QhRRRR/# rP   r%   )r&   s   "r'   r(   r(   ƒ  s   € ÷ 4ñ 4 ð 4°Nñ 4r)   c                óÄ   € \        V R4      pV P                  R4      '       g	   V'       g   V #  ^ RIHp V! V4      p/ V CRT;'       g    R/C#   \         d    Rp L!i ; i)zAAttach the toolset already declared by Hermes's runtime registry.r¤   rµ  )Úget_toolset_for_toolNÚother)r-   r,   Úmodel_toolsr›  r  )r    r¤   r›  rµ  s   &   r'   Ú_with_runtime_toolsetrž  ƒ  sh   € ä�e˜[Ó)€IØ‡y�y�×Ò§9ØˆðÝ4á& yÓ1ˆð 4ˆeÐ3�Y × 2Ð 2¨7Ñ3Ð3øô ô ØŠðús   ¯A ÁAÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   r„  rö   rf  r!   r$   r@   r%   )r&   s   "r'   r(   r(   ‘  s&   € ÷ @ñ @ (ð @°Nð @Àtñ @r)   c                óX   € \        VR 4      pV'       d   V P                  RV/4       R# R# )Úchild_session_idr1   N)r-   rØ  )r„  rf  r¡  s   && r'   Ú_close_child_sessionr¢  ‘  s,   € Ü˜VÐ%7Ó8ÐßØ×Ñ˜|Ð-=Ð>Ö?ñ r)   Úon_session_startc                ó$   € V P                  V4      # rn   )r-  ©ÚrtÚkws   &&r'   rÃ   rÃ   ˜  s   €  r×'>Ñ'>¸rÔ'Br)   Úpre_llm_callc                ó$   € V P                  V4      # rn   )r`  r¥  s   &&r'   rÃ   rÃ   ™  s   €  2×#5Ñ#5°bÔ#9r)   Úpre_api_requestc                ó$   € V P                  V4      # rn   )r�  r¥  s   &&r'   rÃ   rÃ   š  s   €  b×&9Ñ&9¸"Ô&=r)   Úpre_tool_callc                ó6   € V P                  \        V4      4      # rn   )r   rž  r¥  s   &&r'   rÃ   rÃ   ›  s   €  B×$6Ñ$6Ô7LÈRÓ7PÔ$Qr)   Úpost_tool_callc                ó6   € V P                  \        V4      4      # rn   )rÀ  rž  r¥  s   &&r'   rÃ   rÃ   œ  s   €  R×%8Ñ%8Ô9NÈrÓ9RÔ%Sr)   Úpost_approval_responsec                ó$   € V P                  V4      # rn   )r¬  r¥  s   &&r'   rÃ   rÃ   �  s   € ¨R×-?Ñ-?ÀÔ-Cr)   Úon_skill_lifecyclec                ó$   € V P                  V4      # rn   )rÓ  r¥  s   &&r'   rÃ   rÃ   ž  s   € ¨×)BÑ)BÀ2Ô)Fr)   Úpost_api_requestc                ó(   € V P                  VR R7      # )T©r„  ©r˜  r¥  s   &&r'   rÃ   rÃ   Ÿ  s   €  r×';Ñ';¸BÀtÐ';Ô'Lr)   Úpost_auxiliary_callc                ó$   € V P                  V4      # rn   )r7  r¥  s   &&r'   rÃ   rÃ      s   € ¨"×*DÑ*DÀRÔ*Hr)   Úapi_request_errorc                ó(   € V P                  VR R7      # )Fr¶  r·  r¥  s   &&r'   rÃ   rÃ   ¡  s   € ¨×(<Ñ(<¸RÈÐ(<Ô(Nr)   Úon_session_endc                ó$   € V P                  V4      # rn   ©rÜ  r¥  s   &&r'   rÃ   rÃ   ¢  s   €  R§^¡^°BÔ%7r)   Úsubagent_stopÚon_session_finalizec                ó$   € V P                  V4      # rn   ©rØ  r¥  s   &&r'   rÃ   rÃ   ¤  s   € ¨"×*:Ñ*:¸2Ô*>r)   Úon_session_resetc                ó$   € V P                  V4      # rn   rÂ  r¥  s   &&r'   rÃ   rÃ   ¥  s   €  r×'7Ñ'7¸Ô';r)   z4dict[str, Callable[[_Runtime, dict[str, Any]], Any]]r—  c               ó$   € V ^8„  d   QhRRRRRR/# )r   rø   zrelay_runtime.RelayRuntimer©   r!   r$   r@   r%   )r&   s   "r'   r(   r(   ª  s#   € ÷ 3ñ 3Ð :ð 3À^ð 3ÐX\ñ 3r)   c                ó’   € ?V P                   \        P                  ! 4       8X  d"   \        4       '       d   \	        RV R7       R# R# R# )zDPrepare the profile subscriber before the coordinator opens a scope.T)Úretry_failedrø   N)r‚  r
   r€  r}  r–  )rø   r©   s   &&r'   Ú_prepare_core_sessionrÈ  ª  s6   € àØ×Ñœ=×<Ò<Ó>Ô>Ä7Ç9Â9Ü $¨T×2ñ DMÑ>r)   rT   r+   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   r1   r#   rF   ÚplatformrT   r$   r@   r%   )r&   s   "r'   r(   r(   ±  s4   € ÷ ñ ØðØ!$ðØ03ðØHKðà	ñr)   c           	     ó$   € \        RRWW#R7       R# )z:Start task metrics at the outer Hermes execution boundary.r[  T)rÇ  r1   rF   rÊ  rT   N)Ú_run_task_hook)r1   rF   rÊ  rT   s   $$$$r'   Ústart_task_runrÍ  ±  s   € ô Ø 4°JØ÷r)   c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   r(   »  s   € ÷ (ñ (˜4ñ (r)   c            	     ó"  € \         ;_uu_ 4        \        P                  4        U u. uF  p \        V \        4      '       g   K  V NK  	  pp RRR4       X F  p V P                  V P                  4       K   	  R# u up i   + '       g   i     L;; i)zßRun each live runtime's exit flush now, for a process that leaves through ``os._exit`` (the
``hermes -z`` exit) and so never reaches the atexit hook that closes sessions and writes
``task_run.finished`` / ``session.count``.N)r�  r   rw   r9   rö   r4  r  )r„  Úruntimess     r'   Úshutdown_runtimesrÑ  »  sc   € ÷ 
ŽÜ+4×+;Ñ+;Ô+=Ó_Ñ+= ÄÈGÔU]×A^—G�GÑ+=ˆÐ_÷ 
ãˆØ�‰�g×&Ñ&Ö'ó ùò `÷ 
�ús"   �A>¦A9ÁA9Á	A>Á9A>Á>B	c               ó    € V ^8„  d   QhRRRR/# rô  r%   )r&   s   "r'   r(   r(   Å  s   € ÷ Iñ I #ð I¨$ñ Ir)   c                óö   € V '       d   \        4       '       g   R# \        P                  \        P                  ! 4       4      p\        V\        4      '       d!   VP                  VP                  RV /4       R# R# )zœEmit the summary of a session a surface retired without a finalize hook (gateway
auto-reset, idle expiry). Never creates a runtime; unknown ids are a no-op.Nr1   )	r}  r   r,   r
   r€  r9   rö   r4  rØ  ©r1   r„  s   & r'   Úclose_session_runrÕ  Å  sR   € ÷ œWŸYšYÙÜ�m‰mœM×=Ò=Ó?Ó@€GÜ�'œ8×$Ò$Ø�‰�g×+Ñ+¨l¸JÐ-GÖHñ %r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úold_session_idr#   Únew_session_idr$   r@   r%   )r&   s   "r'   r(   r(   Ï  s&   € ÷ Nñ N 3ð N¸ð NÀñ Nr)   c                ó  € V '       d   V'       d   W8X  g   \        4       '       g   R# \        P                  \        P                  ! 4       4      p\        V\        4      '       d   VP                  VP                  W4       R# R# )z¶Compression rotated a conversation's session id (the one seam that continues a conversation
under a new id). Never creates a runtime: a runtime that does not exist served no segment.N)	r}  r   r,   r
   r€  r9   rö   r4  rÜ  )r×  rØ  r„  s   && r'   rÜ  rÜ  Ï  sW   € ÷ §°>Ô3SÔ[b×[dÒ[dÙÜ�m‰mœM×=Ò=Ó?Ó@€GÜ�'œ8×$Ò$Ø�‰�g×,Ñ,¨nÖMñ %r)   Úresultri  c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   r1   r#   rF   rÊ  rÚ  údict[str, Any] | Noneri  úBaseException | Noner$   r@   r%   )r&   s   "r'   r(   r(   Ù  s>   € ÷ ñ ØðØ!$ðØ03ðà!ðà1Eðð 
ñr)   c           	     ó:   € \        RRV RVRV/\        W44      B  R# )z7Finish task metrics for every return or exception path.r1   rF   rÊ  Nr¾  )rÌ  Ú_terminal_flags)r1   rF   rÊ  rÚ  ri  s   $$$$$r'   Úfinish_task_runrà  Ù  s1   € ô
 ñ Ø",ðØ6=ðØHPðä
˜&Ó
(ôr)   c               ó$   € V ^8„  d   QhRRRRRR/# r$  r%   )r&   s   "r'   r(   r(   ä  s!   € ÷ ?ñ ?˜cð ?¨ð ?¸Dñ ?r)   c                ó¼   € \        4       '       d   \        P                  ! 4       '       g   R# \        RR7      pVe   VP	                  VP
                  W4       R# R# )zOEmit one process-level decision mark when shared metrics are on (never raises).NT©rÇ  )r}  r
   r•  r–  r4  r£  )rÒ  rD  r„  s   && r'   r£  r£  ä  sC   € ä�9Š9œM×GÒG×IÒIÙÜ¨Ô-€GØÒØ�‰�g×1Ñ1°4Ö>ñ r)   c               ó    € V ^8„  d   QhRRRR/# r(  r%   )r&   s   "r'   r(   r(   í  s   € ÷ iñ iÐ&Fð iÈ3ñ ir)   c                óÞ   € \        4       '       d   \        P                  ! 4       '       g   \        V 4      # \	        RR7      pVe'   VP                  VP                  V 4      ;'       g    ^ # ^ # )a  ``record_process_mark`` for facts recovered from a file the caller deletes only once they are
saved (a busy store would otherwise lose them for good). How many rows are settled: saved, rejected
by the contract, or nothing to record because collection is off.Trã  )r}  r
   r•  rt   r–  r4  r0  )r  r„  s   & r'   r0  r0  í  sW   € ô �9Š9œM×GÒG×IÒIÜ�5‹zÐÜ¨Ô-€GØNUÒNaˆG�M‰M˜'×<Ñ<¸eÓD×IÐIÈÐhÐghÐhr)   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# r  r%   )r&   s   "r'   r(   r(   ÷  s8   € ÷ Zñ Z Cð Z°Sð ZÈ.ð ZÐadð ZÐmqñ Zr)   c                óž   € \         P                  ! 4       '       g   R# \        RR7      pVe    VP                  VP                  WW#4       R# R# )z_Record one friction signal in the active profile's runtime (callers already checked enabled()).NTrã  )r
   r•  r–  r4  r!  )r  r1   r  rÅ   r„  s   &&&& r'   Úrecord_session_frictionrè  ÷  s?   € ä×6Ò6×8Ò8ÙÜ¨Ô-€GØÒØ�‰�g×-Ñ-¨vÀ>ÖYñ r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÃ  r%   )r&   s   "r'   r(   r(      s.   € ÷ Vñ V Sð V°ð VÀTð VÈdñ Vr)   c                óÀ   € \         P                  \        P                  ! 4       4      p\	        V\
        4      '       d    VP                  VP                  WV4       R# R# )zWThe tools one primary request sent (caller checked enabled()); never creates a runtime.N)r   r,   r
   r€  r9   rö   r4  rÏ  )r1   rÄ  rÅ  r„  s   &&& r'   rÏ  rÏ     sA   € ä�m‰mœM×=Ò=Ó?Ó@€GÜ�'œ8×$Ò$Ø�‰�g×2Ñ2°JÀ}ÖUñ %r)   c               ó(   € V ^8„  d   QhRRRRRRRR/# r¾  r%   )r&   s   "r'   r(   r(     s/   € ÷ Rñ R Cð R°ð RÈCð RÐTXñ Rr)   c                óž   € \         P                  ! 4       '       g   R# \        RR7      pVe    VP                  VP                  WV4       R# R# )z>A prompt-cache break Hermes caused (caller checked enabled()).NTrã  )r
   r•  r–  r4  rÀ  )r­  r”  r1   r„  s   &&& r'   rÀ  rÀ    s?   € ä×6Ò6×8Ò8ÙÜ¨Ô-€GØÒØ�‰�g×6Ñ6¸ÀjÖQñ r)   c               ó    € V ^8„  d   QhRRRR/# rô  r%   )r&   s   "r'   r(   r(     s   € ÷ ?ñ ?¨#ð ?°$ñ ?r)   c                ó(  € V '       d,   \        4       '       d   \        P                  ! 4       '       g   R# \        P	                  \        P
                  ! 4       4      p\        V\        4      '       d   VP                  VP                  V 4       R# R# )zµCount turns-before-switch for a session this process served; never creates a runtime (a
runtime that does not exist saw no turns). Callers are already in the owning profile's scope.N)
r}  r
   r•  r   r,   r€  r9   rö   r4  r  rÔ  s   & r'   Úrecord_model_switch_afterrï    s[   € ÷ œWŸYšY¬m×.YÒ.Y×.[Ò.[ÙÜ�m‰mœM×=Ò=Ó?Ó@€GÜ�'œ8×$Ò$Ø�‰�g×1Ñ1°:Ö>ñ %r)   rÇ  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úmethodr#   rÇ  r:   r    r   r$   r@   r%   )r&   s   "r'   r(   r(     s)   € ÷ 7ñ 7˜3ð 7°ð 7Èð 7ÐPTñ 7r)   c               ó„   € \        4       '       g   R # \        VR7      pVe   VP                  \        W04      V4       R # R # )Nrã  )r}  r–  r4  rÊ  )rñ  rÇ  r    r„  s   &$, r'   rÌ  rÌ    s4   € Ü�9Š9ÙÜ¨Ô5€GØÒØ�‰”g˜gÓ.°Ö6ñ r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÚ  rÜ  ri  rÝ  r$   r!   r%   )r&   s   "r'   r(   r(   "  s$   € ÷ ñ Ð1ð Ð:Nð ÐSañ r)   c                ó~  € Vem   \        V\        \        34      ;'       g    \        V4      P                  R8H  pV'       d   RpM\        V\
        4      '       d   RMRpRRRV'       * RVR	VR
R/# \        V \        4      '       d   T M/ pVP                  R4      RJ p\        VP                  R	4      ;'       g    VP                  R4      ;'       g    R4      pRVP                  R4      RJ RTRVP                  R4      RJ R	T;'       g    V'       d   RMRR\        VP                  R4      ;'       g    R4      /# )zSBounded completed/failed/interrupted/turn_exit_reason for a task's return or raise.ÚCancelledErrorÚinterrupted_by_userrh  r   r²  Fr   rà  r   Úfailure_classÚ	exceptionTÚfailure_reasonr+   r—   )	r9   ÚKeyboardInterruptÚInterruptedErrorÚtyper›   ÚTimeoutErrorrÖ   r,   r#   )rÚ  ri  rà  ÚreasonÚterminalr   s   &&    r'   rß  rß  "  s4  € àÒä�uÔ0Ô2BÐCÓD÷ 8ð 8Ü�E‹{×#Ñ#Ð'7Ñ7ð 	÷ Ø*‰Fä$.¨u´l×$CÒ$C‘[ÐIYˆFà˜ ¨k¬/¸=È+Ø ¨¸ð
ð 	
ô $ F¬D×1Ò1‰v°r€HØ�\‰\˜(Ó# tÐ+€FÜ�—‘Ð0Ó1×YÐY°X·\±\ÐBRÓ5S×YÐYÐWYÓZ€Fà�X—\‘\ +Ó.°$Ð6Ø�&Ø�x—|‘| MÓ2°dÐ:Ø˜F×IÐI·6¡x¸yàœ#˜hŸl™lÐ+;Ó<×BÐBÀÓCðð r)   rø   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÇ  r:   rø   rù   r$   z_Runtime | Noner%   )r&   s   "r'   r(   r(   >  s$   € ÷ ñ ØðØ)Jðàñr)   c                ó$  € \         P                  ! 4       p\        ;_uu_ 4        \        P	                  V4      p\        V\        4      '       d2   Ve   VP                  VJ d   VuuR R R 4       # VP                  4        MV\        J d   V '       g    R R R 4       R #  \        VR7      ;\        V&   pTuuR R R 4       #   \         d1    \        P                  RRR7       \        \        T&    R R R 4       R # i ; i  + '       g   i     R # ; i)N)rø   z+Hermes shared metrics initialization failedTr
  )r
   r€  r�  r   r,   r9   rö   rø   rú  Ú_RUNTIME_FAILEDr  r  r2  )rÇ  rø   r‚  r„  s   $$  r'   r–  r–  >  sÔ   € ô  ×3Ò3Ó5€Kß	ŽÜ—-‘- Ó,ˆÜ�gœx×(Ò(ØŠ|˜wŸ|™|¨tÓ3Ø÷	 
Šð
 ×ÑÕ ØœÓ'·Ø÷ 
‰ð	Ü/7¸TÔ/BÐBŒI�kÑ" Wð
 ÷ 
Šøô ô 	Ü�N‰NÐHÐSWˆNÔXÜ%4ŒI�kÑ"Ø÷ 
‰ð	ú÷ 
�ˆús<   ¤AC>Á0"C>ÂC>ÂC Â4C>Ã /C;Ã/C>Ã:C;Ã;C>Ã>D	c               ó   € V ^8„  d   QhRR/# rè  r%   )r&   s   "r'   r(   r(   X  s   € ÷ ñ ˜$ñ r)   c                 ó  € \         ;_uu_ 4        \        \        P                  4       4      p \        P	                  4        RRR4       X  F+  p\        V\        4      '       g   K  VP                  4        K-  	  R#   + '       g   i     LC; i)zAReset all profile-scoped shared-metrics state for isolated tests.N)r�  rê  r   rw   rû  r9   rö   r  )rÐ  r„  s     r'   Ú_reset_for_testsr  X  sV   € ç	ŽÜœ	×(Ñ(Ó*Ó+ˆÜ�‰Ô÷ 
ó ˆÜ�gœx×(Ô(Ø×ÑÖó ÷ 
�ús   �2A<Á<B	l     qarg  )mÚ__conditional_annotations__rè   Ú
__future__r   r  r  ÚcontextvarsÚloggingrÔ   r*  Úcollectionsr   r   Údataclassesr   r   Útimer   Útypingr   r	   rÄ  r
   Úagent.portal_tagsr   Úhermes_cli.version_infor   r  r   r+   r   r[   r   rÚ   r   r¸   r   rÜ   r   r�  r   r×   r   r   r   Úshared_metrics_subscriberr   Ú	getLoggerr›   r  Úobjectr  r   rŸ   rÕ   r�  rä  r:  r-   r4   r;   rC   rL   r·   ra   rc   ri   ro   rz   r‰   r�   r’   r¢   r¨   r?   rß   rÕ  rô   rö   r>  rC  rD  r}  r‰  r�  r’  r˜  rž  r¢  r—  rˆ  rÈ  rÍ  rÑ  rÕ  rÜ  rà  r£  r0  rè  rÏ  rÀ  rï  rÌ  rß  r–  ÚSESSION_COORDINATORÚregister_session_initializerr  )r  s   @r'   Ú<module>r     sÊ  øðÜ Eå "ã Û Û Û Û Û ß *ß (Ý ß  å Ý 6Ý 4å .Ý 1Ý 6Ý .Ý 6Ý .Ý ,ß RÑ RÝ >à	×	Ò	˜8Ó	$€á“(€Ø*,€	Ð'Ó ,Ø—’Ó!€à�dÐ.Ð0@ÐA€à,Ð õ%õAõ`õõ
(ñ   ¨Ð 1Ó2Ð õbõ$>õMõEõõð ÷:ð :ó ð:ð ÷+ð +ó ð+ð ÷=ð =ó ð=ð& ÷ð ó ðð6 ÷
@ð 
@ó ð
@ð €õ	{÷xañ xaõv!	,ò.õ=õõ*4ð  Ð õYõ8Zõ4õ@ð ÑBØÑ9ØÑ=ØÑQØÑSØÑCØÑFØÑLØÑHØÑNØÑ7ØÐ)ØÑ>ØÑ;ðH€ÐDó ñ  ˜.Ó)€õ3ðØNP÷õ(õIõNðà$(ðàHL÷õ?õi÷ZõVõRõ?ð7¸÷ 7õð8Ø!ðØMQ÷ð* × !Ñ !× >Ñ >ØÐ*ô÷
r)   