+
    „WÝjÕ  ã                  ój  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^RIHt ^RIHt ^RIHt ^R	IHt ^R
IHt ^RIHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t- ]P\                  ! ]/4      t0]!]$R R R R ](])]*]']#]Pb                  3t2R R lt3 ! R R4      t4R# )z?Relay subscriber for the persisted Hermes shared-metrics slice.)ÚannotationsN)ÚAny)ÚRUNTIME_INSTANCE_KEY)Úget_hermes_home)Úshared_metrics_engagement)Úshared_metrics_signals)ÚSharedMetricsStore)Úmilestones_for)Údetect_client_install_method)ÚCLIENT_ACTIVE_METRICÚCOMMIT_TICKET_KEYÚFEATURE_DISABLED_METRICÚFEATURE_USED_MARKÚINSTALL_SNAPSHOT_METRICÚMODEL_ROUTE_METRICÚTOOL_CALL_METRICÚTOOL_LATENCY_METRICÚTOOL_USAGE_METRICÚclient_active_counterÚclient_resourceÚdecision_counterÚinstall_snapshot_counterÚmodel_call_dimensionsÚmodel_token_countersÚskill_counterÚtask_counterÚtask_duration_counterÚtool_approval_counterÚtool_call_dimensionsÚtool_latency_dimensionsÚtool_usage_dimensionsc                ó4   € \        \        \        V 4      4      # ©N)Ú_namedr   r   ©Úevents   &ÚfC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\observability\shared_metrics_subscriber.pyÚ<lambda>r'   3   s   € ”&Ô+Ô-BÀ5Ó-IÔJó    c                ó4   € \        \        \        V 4      4      # r"   )r#   r   r   r$   s   &r&   r'   r'   4   s   € ”&Ô)Ô+?ÀÓ+FÔGr(   c                ó4   € \        \        \        V 4      4      # r"   )r#   r   r    r$   s   &r&   r'   r'   5   s   € ”&Ô*Ô,AÀ%Ó,HÔIr(   c                ó4   € \        \        \        V 4      4      # r"   )r#   r   r   r$   s   &r&   r'   r'   6   s   € ”&Ô,Ô.EÀeÓ.LÔMr(   c               ó$   € V ^8„  d   QhRRRRRR/# )é   Úmetric_nameÚstrÚ
dimensionszdict | NoneÚreturnztuple[str, dict] | None© )Úformats   "r&   Ú__annotate__r4   @   s'   € ÷ Eñ E˜ð E¨ð EÐ9Pñ Er(   c                ó   € Vf   R # W3# r"   r2   )r.   r0   s   &&r&   r#   r#   @   s   € ØÒ%ˆ4ÐD¨KÐ+DÐDr(   c                  ó˜   € ] tR t^DtRtRR/R R lltR R lt]R R	 l4       tR
 R lt	R R lt
R R ltR R ltR R ltR R ltRtR# )ÚSharedMetricsSubscriberz>Persist validated Hermes counters from Relay lifecycle events.Ú
runtime_idNc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r-   Ústorer   Úhermes_versionr/   r8   z
str | Noner1   ÚNoner2   )r3   s   "r&   r4   Ú$SharedMetricsSubscriber.__annotate__G   s2   € ÷ .ñ .à!ð.ð ð.ð
 ð.ð 
ñ.r(   c               	óˆ  € Wn         \        V\        P                  ! 4       \        P                  ! 4       \        4       R 7      V n        W0n        RV n        \        P                  ! 4       V n        \        VP                  4       4      V n        \        VP                  4       4      V n        / V n        \%        4       V n        R# ))Úos_nameÚarchitectureÚinstall_methodTN)r:   r   ÚplatformÚsystemÚmachiner
   Ú_client_resourceÚ_runtime_idÚ_activeÚ	threadingÚRLockÚ_lockÚsetÚrecorded_milestonesÚ_milestones_doneÚrecorded_featuresÚ_features_doneÚ_saved_ticketsr   Ú_hermes_home)Úselfr:   r;   r8   s   &&&$r&   Ú__init__Ú SharedMetricsSubscriber.__init__G   s‘   € ð Œ
Ü /ØÜ—O’OÓ%Ü!×)Ò)Ó+Ü7Ó9ô	!
ˆÔð &ÔØˆŒÜ—_’_Ó&ˆŒ
Ü*-¨e×.GÑ.GÓ.IÓ*JˆÔÜ(+¨E×,CÑ,CÓ,EÓ(FˆÔØ.0ˆÔä+Ó-ˆÖr(   c               ó   € V ^8„  d   QhRR/# )r-   r1   r<   r2   )r3   s   "r&   r4   r=   ^   s   € ÷ !ñ !˜Dñ !r(   c                óv   € V P                   ;_uu_ 4        RV n        RRR4       R#   + '       g   i     R# ; i)z@Stop accepting events before telemetry is disabled or torn down.FN)rJ   rG   )rR   s   &r&   Ú
deactivateÚ"SharedMetricsSubscriber.deactivate^   s   € à�Z�Z‹ZØ ˆDŒL÷ �Z�ZŠZús   •'§8	c               ó    € V ^8„  d   QhRRRR/# )r-   r%   r   r1   úlist[tuple[str, dict, int]]r2   )r3   s   "r&   r4   r=   d   s   € ÷ 5ñ 5˜ð 5Ð!<ñ 5r(   c                ó„   a € V 3R l\          4        Uu. uF  qf   K  . VO^N5NK  	  ppV\        S 4      ,           # u upi )zGReturn every ``(metric_name, dimensions, amount)`` the event satisfies.c              3  ó2   <"  € T F  q! S4      x € K  	  R # 5ir"   r2   )Ú.0Úprojectr%   s   & €r&   Ú	<genexpr>Ú4SharedMetricsSubscriber._classify.<locals>.<genexpr>f   s   øé € Ð$MÁ9¸ W¨U§^ ^Ã9ùs   ƒ)Ú	_COUNTERSr   )r%   ÚmÚcounteds   f  r&   Ú	_classifyÚ!SharedMetricsSubscriber._classifyc   s@   ø€ ô %NÅ9Ô$MÓ_Ñ$M˜q•7�Q�7˜”7Ñ$MˆÐ_ØÔ-¨eÓ4Õ4Ð4ùò `s   ”=ž=c               ó$   € V ^8„  d   QhRRRRRR/# ©r-   r.   r/   r0   Údictr1   r<   r2   )r3   s   "r&   r4   r=   i   s!   € ÷ 
1ñ 
1¨cð 
1¸tð 
1Èñ 
1r(   c                ó@  € \        W4       Uu. uF  q3V P                  9  g   K  VNK  	  ppV'       g   R# ^RIHp V! V P                  4      pV FD  pV P
                  P                  WvV P                  4       V P                  P                  V4       KF  	  R# u upi )zQLatch every install milestone this counter reaches (each once per install, ever).N)Úinstall_age_bucket)	r	   rM   Úshared_metrics_snapshotrj   rQ   r:   Úrecord_milestonerE   Úadd)rR   r.   r0   rb   Úreachedrj   ÚageÚ	milestones   &&&     r&   Ú_record_milestonesÚ*SharedMetricsSubscriber._record_milestonesi   s‚   € ä,¨[ÔEÓhÑE˜ÐRV×RgÑRgÑIg—1�1ÑEˆÐhßÙÝ?á  ×!2Ñ!2Ó3ˆÛ ˆIØ�J‰J×'Ñ'¨	¸×8MÑ8MÔNØ×!Ñ!×%Ñ% iÖ0ó !ùò is
   ŽB¥Bc               ó$   € V ^8„  d   QhRRRRRR/# )r-   r%   r   Ú
classifiedrZ   r1   r<   r2   )r3   s   "r&   r4   r=   u   s(   € ÷ _ñ _¨ð _Ð9Tð _ÐY]ñ _r(   c           	     ó¸  € \         P                  ! V4      \         P                  ! V4      rCVf   Vf   R# V P                  ;_uu_ 4        V P                  '       g    RRR4       R#  \         P
                  ! V P                  V P                  W4R7       RRR4       R#   \         d    \        P                  RRR7        L.i ; i  + '       g   i     R# ; i)zYFold a turn start/end or an attended turn's model into the local daily engagement rollup.N)ÚsurfaceÚroutez-Unable to update the Hermes engagement rollupT©Úexc_info)Ú
engagementÚinteraction_surfaceÚ
turn_routerJ   rG   Úrecordr:   rE   Ú	ExceptionÚloggerÚwarning)rR   r%   rt   rv   rw   s   &&&  r&   Ú_record_engagementÚ*SharedMetricsSubscriber._record_engagementu   s    € ä#×7Ò7¸
ÓCÄZ×EZÒEZÐ[`ÓEa�ØŠ?˜uš}ÙØ�Z�Z‹ZØ—<—<�<Ø÷ ‰Zð_Ü×!Ò! $§*¡*¨d×.CÑ.CÈWÕb÷	 ‰Zøô
 ô _Ü—‘ÐNÐY]�Ö^ð_ú÷ �ZˆZús*   Á
CÁ)-B Â "CÃCÃCÃCÃC	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r-   r.   r/   r0   rh   ÚamountÚintr1   r<   r2   )r3   s   "r&   r4   r=   ‚   s.   € ÷ Lñ L Cð L°Tð LÀ3ð LÈ4ñ Lr(   c           
     	óú   aaaa€ V P                   V P                  uoo\        R  \        VVVV3R l\        VV3R l\
        VVV3R l/P                  S4      pVe
   V! 4        R# SP                  SSSV4       R# )c                 ó   € R # r"   r2   r2   r(   r&   r'   Ú2SharedMetricsSubscriber._persist.<locals>.<lambda>…   s   € ¡tr(   c                 ó*   <€ SP                  SS S4      # r"   )Úrecord_counter_once_per_day)r0   r.   Úresourcer:   s   €€€€r&   r'   rˆ   †   s   ø€ ¨U×-NÑ-NÈ{Ð\fÐhpÔ-qr(   c                 ó&   <€ SP                  S 4      # r"   )Úrecord_client_active)r‹   r:   s   €€r&   r'   rˆ   ‡   s   ø€ ¨%×*DÑ*DÀXÔ*Nr(   c                 ó(   <€ SP                  S S4      # r"   )Úrecord_install_snapshot)r0   r‹   r:   s   €€€r&   r'   rˆ   ˆ   s   ø€ ¨U×-JÑ-JÈ:ÐW_Ô-`r(   N)r:   rE   r   r   r   r   ÚgetÚrecord_counter)rR   r.   r0   r„   Úspecialr‹   r:   s   &ff& @@r&   Ú_persistÚ SharedMetricsSubscriber._persist‚   sf   û€ ØŸ*™* d×&;Ñ&;ˆˆˆxä™|Ü#×%qÜ Õ"NÜ#Ö%`ð	
÷
 ‰#ˆkÓ
ð 	ð ÒÙŽIà× Ñ  ¨j¸(ÀFÖKr(   c               ó$   € V ^8„  d   QhRRRRRR/# rg   r2   )r3   s   "r&   r4   r=   �   s!   € ÷ -ñ -¨Cð -¸Tð -Àdñ -r(   c                ó¼  € \         P                  ! W4       Uu. uF  q3V P                  9  g   K  VNK  	  ppV'       g   R# \         P                  ! V P                  4      pV FE  p V P
                  P                  WeV P                  4       T P                  P                  T4       KG  	  R# u upi   \         d    \        P                  RTRR7        Kv  i ; i)zVLatch each feature's first real use (once per install, with the owning profile's age).Nz Feature adoption not latched: %sTrx   )ÚsignalsÚfeatures_forrO   Údays_since_install_bucketrQ   r:   Úrecord_feature_adoptionrE   r~   r   Údebugrm   )rR   r.   r0   Úfrn   ro   Úfeatures   &&&    r&   Ú_record_featuresÚ(SharedMetricsSubscriber._record_features�   sº   € ä%×2Ò2°;ÔKÓlÑK˜ÐX\×XkÑXkÑOk—1�1ÑKˆÐlßÙÜ×/Ò/°×0AÑ0AÓBˆÛˆGðØ—
‘
×2Ñ2°7À×AVÑAVÔWð ×Ñ×#Ñ# GÖ,ó ùò	 møô ô Ü—‘Ð?ÀÐSW�ÔXÚðús   ™B/°B/Á(&B4Â4#CÃCc               ó    € V ^8„  d   QhRRRR/# )r-   Úticketr/   r1   r…   r2   )r3   s   "r&   r4   r=   �   s   € ÷ 6ñ 6 ð 6¨ñ 6r(   c                ó    € V P                   ;_uu_ 4        V P                  P                  V^ 4      uuRRR4       #   + '       g   i     R# ; i)zZHow many events carrying ``ticket`` settled without a store error (and forget the ticket).N)rJ   rP   Úpop)rR   r¡   s   &&r&   Ú
take_savedÚ"SharedMetricsSubscriber.take_saved�   s-   € à�Z�Z‹ZØ×&Ñ&×*Ñ*¨6°1Ó5÷ �Z�Z‹Zús	   •<¼A	c               ó    € V ^8„  d   QhRRRR/# )r-   r%   r   r1   r<   r2   )r3   s   "r&   r4   r=   ¢   s   € ÷ Yñ Y˜cð Y dñ Yr(   c           
     	óÜ  € \        VR R4      pV P                  e=   \        V\        4      '       d%   VP	                  \
        4      V P                  8w  d   R# \        V\        4      '       d   VP	                  \        4      MRpRpV P                  V4      pV P                  W4       V Fv  w  rgpV P                  ;_uu_ 4        V P                  '       g    RRR4        R#  V P                  WgV4       V P                  Wg4       V P                  Wg4       RRR4       Kx  	  V'       dl   V'       db   V P                  ;_uu_ 4        V P                  '       d1   V P"                  P	                  V^ 4      ^,           V P"                  V&   RRR4       R# R# R#   \         d    Rp\        P!                  RTRR7        L¨i ; i  + '       g   i     EK,  ; i  + '       g   i     R# ; i)ÚmetadataNTFz.Unable to persist the Hermes shared metric: %srx   )ÚgetattrrF   Ú
isinstancerh   r�   r   r   rd   r�   rJ   rG   r“   rq   rž   r~   r   r€   rP   )	rR   r%   r¨   r¡   Úsavedrt   r.   r0   r„   s	   &&       r&   Ú__call__Ú SharedMetricsSubscriber.__call__¢   sx  € Ü˜5 *¨dÓ3ˆØ×ÑÒ'ä˜x¬×.Ò.Ø—<‘<Ô 4Ó5¸×9IÑ9IÔIáÜ4>¸xÌ×4NÒ4N�—‘Ô/Ô0ÐTXˆØˆØ—^‘^ EÓ*ˆ
Ø×Ñ Ô2Û/9Ñ+ˆK VØ——“Ø—|—|�|Ø÷ ’ðØ—M‘M +¸6ÔBØ×+Ñ+¨KÔDØ×)Ñ)¨+ÔB÷ ‘ñ 0:÷ —eØ——“Ø—<—<�<Ø26×2EÑ2E×2IÑ2IÈ&ÐRSÓ2TÐWXÕ2X�D×'Ñ'¨Ñ/÷ ‘ñ ‰6øô !ô Ø!�EÜ—N‘NØHÈ+Ð`dð #ö ðú÷ —‘ú÷ —�ús7   ÃGÃ%4FÅ	AGÆ%G	Æ?GÇG	ÇGÇGÇG+	)	rG   rE   rO   rQ   rJ   rM   rF   rP   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rS   rW   Ústaticmethodrd   rq   r�   r“   rž   r¤   r¬   Ú__static_attributes__r2   r(   r&   r7   r7   D   sT   † ÙHð.ð
 "&÷.õ.!ð
 ô5ó ð5õ

1õ_õLõ-õ6÷
Yñ Yr(   r7   )5r²   Ú
__future__r   ÚloggingrB   rH   Útypingr   Úagent.relay_runtimer   Úhermes_constantsr   Ú r   rz   r   r—   Úshared_metricsr   Úshared_metrics_fieldsr	   Úshared_metrics_installr
   Úshared_metrics_contractr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Ú	getLoggerr®   r   Úfeature_used_counterra   r#   r7   r2   r(   r&   Ú<module>rÁ      s£   ðÙ Eå "ã Û Û Ý å 4Ý ,å 5Ý /Ý .Ý 1Ý @÷÷ ÷ ÷ ÷ ÷ ð2 
×	Ò	˜8Ó	$€ð ØÙJÙGÙIÙMØØØØØØ× Ñ ð€	õ E÷zYó zYr(   